質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

2回答

4952閲覧

ASP.NETを利用したログイン機能

sbksn_po

総合スコア1

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2021/06/13 13:02

編集2021/06/13 15:19

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
VisualStudio2019を使いC#とASP.NETのWebFormで掲示板のようなものを作成してみたいと思っています。
その際にDBにログインID、パスワード、氏名を登録する段階までは何とか実装してみることは出来ました。
しかし肝心のDBを参照し、ログイン画面への遷移の仕方について詰まってしまった為
質問の投稿をしようと考えました。

私自身が検索を行いほぼコピーですがつなげてみたコードを添付いたします。
また、より容易な方法や書きやすい方法などあれば教えていただきたいです。

【開発環境】
Windows10
NET Framework のバージョン 4.8
DB SQLserver ver2019

■■な機能を実装中に以下のエラーメッセージが発生しました。

イメージ説明

該当のソースコード

C#

1using System; 2using System.Configuration; 3using System.Data; 4using System.Data.SqlClient; 5 6 7 8public partial class top : System.Web.UI.Page 9{ 10 protected void Page_Load(object sender, EventArgs e) 11 { 12 13 } 14 15 protected void login_Click(object sender, EventArgs e) 16 { 17 18 19 20 var table = new DataTable(); 21 var connectionString = ConfigurationManager.ConnectionStrings["bbs"].ConnectionString; 22 DataTable dataTable = new DataTable(); 23 24 using (var connection = new SqlConnection(connectionString)) //ログインした人のセッション保持 25 using (var command = connection.CreateCommand()) 26 { 27 try 28 { 29 // データベースの接続開始 30 connection.Open(); 31 32 // SQLの準備 33 command.Parameters.Add(new SqlParameter("@logintext", TextID.Text)); 34 command.CommandText = @"SELECT name FROM Table WHERE [loginID] = @logintext"; 35 // SQLの実行 36 var adapter = new SqlDataAdapter(command); 37 DataRow dr = table.Rows[0]; 38 Session["name"] = table.Rows[0][0]; 39 } 40 catch (Exception exception) 41 { 42 Console.WriteLine(exception.Message); 43 throw; 44 } 45 finally 46 { 47 // データベースの接続終了 48 connection.Close(); 49 } 50 } //ここまで 51 52 53 string sql = "SELECT * FROM [Table] WHERE [name] = " + "'" + Textname.Text + "'" + " AND [loginID] = " + "'" + TextID.Text + "'" + " AND [pass]= " + "'" + Textpass.Text + "'"; 54 55 using (SqlConnection conn = new SqlConnection(connectionString)) 56 { 57 using (SqlCommand cmd = new SqlCommand(sql, conn)) 58 { 59 using (SqlDataAdapter adapter = new SqlDataAdapter(cmd)) 60 { 61 adapter.Fill(dataTable); 62 int rowcount = dataTable.Rows.Count; 63 64 if (rowcount == 1) 65 { 66 Response.Redirect("./kari.aspx"); 67 } 68 else 69 { 70 Literal1.Visible = true; 71 72 } 73 } 74 } 75 } 76 } 77 78 79 protected void touroku_Click(object sender, EventArgs e) 80 { 81 Response.Redirect("./kaintouroku.aspx"); 82 } 83 } 84 85 86
<%@ Page Title="" Language="C#" MasterPageFile="~/bbs.master" AutoEventWireup="true" CodeFile="top.aspx.cs" Inherits="top" %> <asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> <p> <asp:Label ID="Label1" runat="server" Text="氏名"></asp:Label> <asp:TextBox ID="Textname" runat="server"></asp:TextBox> </p> <p> <asp:Label ID="Label2" runat="server" Text="ID"></asp:Label> <asp:TextBox ID="TextID" runat="server"></asp:TextBox> </p> <p> <asp:Label ID="Label3" runat="server" Text="PASS"></asp:Label> <asp:TextBox ID="Textpass" runat="server"></asp:TextBox> </p> <p> <asp:Button ID="login" runat="server" Text="ログイン" OnClick="login_Click"/> <asp:Literal ID="Literal1" runat="server" Text="※miss" Visible="False"></asp:Literal> </p> <p> <asp:Button ID="touroku" runat="server" Text="新規登録" OnClick="touroku_Click" /> </p> </asp:Content>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/06/13 13:20

ASP.NET と言っても Web Forms, MVC, Web Pages, Razor Pages などいろいろありますので、どれかを書くようにしましょう。(コードを見ればわかるとは言わないでください。あなたが質問の最初の一行目に書けば済むことなのですから) 開発環境(OS, .NET Framework のバージョン、DB は何かとそのバージョンなど)を書いてください。 認証システムを独自実装しているようですが、ASP.NET Identity を使うという選択肢はないのですか? 質問者さんの独自では誰も詳細は分からないのでアドバイスが得にくいし、そもそも、初学者(ですよね?)が認証システムを独自実装するなんて言うのはまず無理ですから。
sbksn_po

2021/06/13 15:04

返答ありがとうございます。 質問に対しての情報量が少なく申し訳ございません。 そして至らない点を教えていただきありがとうございます。 identityについて調べてみたいと思います。
m.ts10806

2021/06/13 21:17 編集

質問は編集できます。→ごめんなさい。書いてましたね。
退会済みユーザー

退会済みユーザー

2021/06/13 23:31 編集

認証システムを独自実装しているようですが、ASP.NET Identity を使うという選択肢はないのですか? まだ調べている最中で、答えが出せないだけで独自実装にこだわっている訳でなければ ASP.NET Identity を紹介しますけど。
退会済みユーザー

退会済みユーザー

2021/06/14 01:01

表題に「ASP.NETを利用したログイン機能」とありますので、ASP.NET と連携を取って連携を取って破綻なく動く認証システムを実装したいのだと理解していますが、そうであれば ASP.NET Identity を使うことをお勧めします。 質問のコードを拝見すると、今の質問者さんのスキルでは ADO.NET を使って SQL Server にアクセスするといった基本的なことができず、それでは ASP.NET Web アプリで使える(あくまで「使える」ということが重要と理解してます)認証システムの独自実装を行うのは無理です。 「ASP.NETを利用したログイン機能」から離れて、質問のコードの ADO.NET を使って SQL Server にアクセスするところだけの問題を解決したいのであれば、新たに別のスレッドを立てて、C#, ADO.NET, SQL Server の質問として聞くことをお勧めします。
退会済みユーザー

退会済みユーザー

2021/06/14 01:12

ASP.NET Identity をは何かを調べている最中で、使うか否か答えが出せないだけで、独自実装にこだわっている訳ではないと勝手に理解して、ASP.NET Identity を使う方法を回答欄に紹介しました。 他にも回答が付いていますので、それらに対するフィードバックを書いてください。
退会済みユーザー

退会済みユーザー

2021/06/15 22:07

その後どうしたのか進展を書いてください。 問題・課題が解決できたならベストアンサーを付けてこのスレッドはクローズしてください。
guest

回答2

0

ベストアンサー

質問の私のコメントに、

認証システムを独自実装しているようですが、ASP.NET Identity を使うという選択肢はないのですか?

まだ調べている最中で、答えが出せないだけで独自実装にこだわっている訳でなければ ASP.NET Identity を紹介しますけど。

と書きましたが、たぶんそういうことであろうと想像して ASP.NET Identity を使った認証システムを紹介します。

Visual Studio 2019 のテンプレートを使って ASP.NET Web Froms アプリのプロジェクトを生成したと思います。

イメージ説明

その先に進んで、Web Forms, MVC 等の選択を行いますが、その際[認証]のオプションで「個別のユーザーアカウント」を選びます(デフォルトは[認証なし(N)])。それだけで ASP.NET Ientity による認証システムが実装されます。

イメージ説明

アプリを実行して「登録」画面に進み、ユーザー ID(メールアドレス)とパスワード(文字数、使用する文字に制約があります)を入力して[登録]ボタンをクリックします。

イメージ説明

登録に成功すると Entity Framework Code First の機能により SQL Server のデータベース(.mdf, .ldf ファイル)がプロジェクトの App_Data フォルダに自動生成されます。登録したアカウント情報も DB に登録されます。

イメージ説明

そして登録したアカウントでログイン状態になります。

イメージ説明

以降はそのアカウントでログインできるようになります。

質問のコードを拝見する限り、今の質問者さんのレベルで ASP.NET Web アプリで使える認証システムの独自実装を行うのは無理です。

やるとしても、それは既存のデータベースにユーザー情報があってそれをどうしても使わなければならないという場合ぐらいだと思います。その場合でも、ASP.NET と連携を取って破綻なく動く認証機能の全てを独自実装するのは相当難しいです。

どうしてもということなら、下の Microsoft の記事の画像にある Data Source, Data Access Layer, Identity Store のレイヤーを自力で実装するにとどめた方が良さそうです。

Custom storage providers for ASP.NET Core Identity
https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity-custom-storage-providers?view=aspnetcore-3.1

それだけでも以下の記事に書いたような実装が必要で、既存のデータベースを使わなければならないという事情が無ければ、独自実装を行うのに必要な時間と労力に見合うメリットはいと思います。(Visual Studio のテンプレートで「個別のユーザーアカウント」を選んでプロジェクトを生成すれば済むはずですので)

ASP.NET Core Identity 独自実装(その1)
http://surferonwww.info/BlogEngine/post/2020/09/04/custom-storage-providers-for-aspnet-core-identity.aspx

投稿2021/06/14 00:52

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sbksn_po

2021/06/14 03:14

細かく教えていただきありがとうございます。 一度こちらを試してみたいと思います!
退会済みユーザー

退会済みユーザー

2021/06/14 04:03

是非一度試してみてください。それから考えましょう。そうすれば独自実装しようなんて言う気は起きなくなると思います。 独自実装で DB にユーザー情報を保持して、ログイン操作があったら DB に問い合わせて ID, パスワードが有効かを調べるのは容易ですが、それは認証システム全体の 1% にも満たないです。そこだけの実装に限った話でも、セキュリティのため生パスワードを保存しないでハッシュするなんてことは考えてもいないのでは? さらに、ASP.NET と連携を取って連携を取って破綻なく動く認証システムとするには、認証チケット / クッキーの発行、クッキーからのユーザー情報の取得、認証が必要なページにアクセスしてきた際のログインページへのリダイレクト等々残り 99% 部分の実装が必要で、素人の手に負えるものではありません。 質問のコメント欄にも書きましたが、表題に「ASP.NETを利用したログイン機能」とありますので、ASP.NET と連携を取って連携を取って破綻なく動く認証システムを実装したいのだと理解していますが、そうであれば ASP.NET Identity を使うことをお勧めします。 質問のコードを拝見すると、今の質問者さんのスキルでは ADO.NET を使って SQL Server にアクセスするといった基本的なことができず、それでは ASP.NET Web アプリで使える(あくまで「使える」ということが重要と理解してます)認証システムの独自実装を行うのは無理です。 「ASP.NETを利用したログイン機能」から離れて、質問のコードの ADO.NET を使って SQL Server にアクセスするところだけの問題を解決したいのであれば、新たに別のスレッドを立てて、C#, ADO.NET, SQL Server の質問として聞くことをお勧めします。
guest

0

C#

1 var adapter = new SqlDataAdapter(command); 2 DataRow dr = table.Rows[0]; 3

SQLを実行せずにいきなりtableをさわっています。
なのでtableには何も入っていないのではないですか?

投稿2021/06/13 23:03

YAmaGNZ

総合スコア10489

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sbksn_po

2021/06/14 03:16

一様DB登録は出来ており、テーブル内にも情報は入っております。 もう一度テーブルの構成など確認してみます。
YAmaGNZ

2021/06/14 03:19

そうではなく、Fillなどでデータを読み込んでいないのではないかということです。 tableに対してデータを入れているところはどこですか?
YAmaGNZ

2021/06/14 03:49

また私の回答は出ているエラーに関してのものなので、この修正を行ったからログインできるようになるものではありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問