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

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

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

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

Q&A

2回答

412閲覧

ログイン認証をし次のフォームについて

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

0グッド

0クリップ

投稿2017/08/17 13:35

自社の課題で管理アプリケーションというものを行っているのですが、
C#でログイン認証をという機能やっているのですが、
うまくログインの認証ができずになっています。

ログイン認証をうまくいくにはどう書いていったらよろしいでしょうか?
ご教示の程、宜しくお願い致します。

こちらの処理でエラーが起こっているところです。
if (this.Form1.cs.txt.ID == dt.Rows[0].ToString())
{
//該当があった時の処理

}

//DB接続しログインの認証をさせる
try
{
//データベース接続を確立させる
string sConnectionString;
sConnectionString = "Server=localhost;Database=mysql;uid=root;pwd=root;";
MySqlConnection conn = new MySqlConnection(sConnectionString);
conn.Open();

//データベースとDatasetオブジェクトの間のリンクを表すDataAdapterを作成 MySqlDataAdapter sa = new MySqlDataAdapter("SELECT * FROM password_list WHERE HASH", conn); //DataAdapterの呼び出し DataSet ds = new DataSet(); sa.Fill(ds); DataTable dt; dt = 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); } //入力されたIDとPasswordの該当があるか確認 if (this.Form1.cs.txt.ID == dt.Rows[0].ToString()) { //該当があった時の処理 } //該当がなかった時の処理 MessageBox.Show("IDが認識しませんでした。"); Form2 form = new Form2(); form.ShowDialog();

ログイン認証をして、次のフォームに移行する処理を試してみたい認識です。

C#

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

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

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

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

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

guest

回答2

0

質問に対する直接の回答ではありませんが・・・

ASP.NET の Membership オブジェクトと Roles オブジェクトを Windows Forms アプリケーションでも利用できますのでそれを使うという手段もあります。

興味がありましたら以下の記事を見てください。

Windows Forms アプリで Membership を利用
http://surferonwww.info/BlogEngine/post/2014/02/11/aspnet-membership-and-roles-objects-usable-in-windows-forms-application.aspx

ご参考まで。

投稿2017/08/18 02:44

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

どういうエラーが起きていてどこで引っかかっているのかわかりませんが、ひとつのやり方として

  • 親フォーム(Application起動時に表示されるForm)に認証済みかどうかのプロパティを持たせる(例えばBoolean)
  • 認証が必要なFormを使おうとしたときプロパティをチェックしてからShowするようにする

とでもしておく

プロパティがFalseの時だけログイン認証するロジックを実行する
このとき書かれているコードのようにApplication側に認証情報を取り寄せず、例えばID+ PASSWORDをクエリで投げてレコードが存在すれば(例えばCount(ID)が1なら)認証OK、存在しなければ(例えばCount(ID)が0なら)認証NGにするようにした方がよいですね

Timerを仕込んでおいて、一定時間後にプロパティをクリア(例えばTrueからFalseへ)とかすると、一定時間は再認証が求められない(=一定時間経てば再認証が必要)みたいなこともできます

ところで

こちらの処理でエラーが起こっているところです。

if (this.Form1.cs.txt.ID == dt.Rows[0].ToString())
{
//該当があった時の処理
}

なんですが、this.Form1.cs.txt.IDに認証するIDが入っていると解釈して、なぜdt.Rows[0].ToString()と比較しているのですか?
dt.Rows[0]にはなにが入っているのか確認しましたか?

投稿2017/08/17 18:48

dojikko

総合スコア3939

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

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

退会済みユーザー

退会済みユーザー

2017/08/17 21:14

2点についての書き方が分からないのですがなんていれたらよろしいのでしょうか? dt.Rows[0].ToString()に関しては、まだ確認ができてないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問