質問: ds.Tables["password_list"]; //DataTableのRowsコレクションに含まれるすべてのDataRowオブジェクトを読み込み foreach (DataRow drCurrent in dt.Rows) { Console.WriteLine( drCurrent["ID"].ToString(), drCurrent["PASSWORD"].ToString()); } Console.ReadLine(); conn.Close(); } catch (MySqlException ex) { Console.WriteLine(ex.Message); } ログイン認証をして、次のフォームに移行する処理を試してみたい認識です。
回答: 別の方がフォロー書いておられますが、たぶん知識レベルに合わない言葉が出ているかと思いますので私からも補足いたします。 提示されているサンプルコードでは肝心な「ログインの認証をさせる」処理が書かれていません。 「ハッシュ」「SALT」「ストレッチ」等は「ログイン認証」の本質とは外れますので、一旦気にしないでください。 「フォーム」と書かれていますが、「Windows Forms」と「Web Forms」のどちらでしょうか? ※まぁどちらでもおおよそ変わりないんですが。 一般的に、ユーザーが入力したIDとパスワードが認証用のテーブルに存在すれば認証OK、という形になります。 (そしてこの認証用のテーブルに格納する値が生のパスワードではまずいため、ハッシュやソルト等の概念が出てきます。) でそれを踏まえてWebと仮定してコードを書くならこんな感じですかね。 ``` protected void btnConfirm_OnClick(object sender, EventArgs e) { var id = this.txtId.Text; var pass = this.txtPassword.Text; if (Authenticate(id, pass)) Response.Redirect("認証OKなページ.aspx"); } private bool Authenticate(string id, string pass) { try { using (SqlConnection conn = new SqlConnection("Server=localhost;Database=mysql;uid=root;pwd=root;")) { conn.Open(); using (SqlDataAdapter sa = new SqlDataAdapter("SELECT * FROM password_list WHERE HASH", conn)) { DataSet ds = new DataSet(); sa.Fill(ds); DataTable dt = ds.Tables["password_list"]; foreach (DataRow drCurrent in dt.Rows) { if (id == drCurrent["ID"].ToString() && pass == drCurrent["PASSWORD"].ToString()) //入力されたID/PASSに該当するデータがDBに存在した=認証が通った return true; } } } } catch (SqlException ex) { //然るべきハンドリング } //認証が通らなかった return false; } ``` ものすごく簡単に書いた必要最低限のコードですので頑張って読み解いてください。 老婆心ながら一言。 ネットのQAサイトで聞かないで、OJTと言うなの投げっぱなし担当である上司・先輩に聞いたほうが早いと思いますよw