- PR -

ACCESS&ASP.NETログイン認証。

投稿者投稿内容
NYRL
ベテラン
会議室デビュー日: 2003/07/14
投稿数: 90
投稿日時: 2003-12-03 17:30
引用:

パスワードとIDが適合したときは正しく処理が行われるのですが、適合しなかった場合、行および列にデータが存在しません。


は文字通り適合するデータがなく行が取得できなかったので
dr.HasRows とかで件数をチェックする必要があると思います。

IsDBNullは該当する行がある時にその項目がNullかどうかを判断するために使います。



[ メッセージ編集済み 編集者: NYRL 編集日時 2003-12-03 17:31 ]

[ メッセージ編集済み 編集者: NYRL 編集日時 2003-12-03 17:32 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-12-03 17:31
SelCmd.Parameters.Add("会員ID");
SelCmd.Parameters.Add("パスワード");
SelCmd.Parameters["会員ID"].Value=Text1.Text;
SelCmd.Parameters["パスワード"].Value=Text2.Text;
SelCmd.Connection.Open();
OleDbDataReader dr=SelCmd.ExecuteReader();
if (dr.Read()) {
// データがあった
} else {
// データがなかった
}

〜〜〜〜〜〜〜〜〜〜〜〜〜
では?『会員ID』と『パスワード』が一致する行が2つ以上あるはずないですよね?
引用:
MSDNより
OleDbDataReader.Read メソッド

OleDbDataReader を次のレコードに進めます。

戻り値
次の行がある場合は true 。それ以外の場合は false 。

ぢゃん♪
大ベテラン
会議室デビュー日: 2003/06/12
投稿数: 208
お住まい・勤務地: 都内
投稿日時: 2003-12-03 17:31
引用:

にしおさんの書き込み (2003-12-03 17:06) より:
dr.IsDBNullの部分では、dr.GetOrdinal("項目名")という項目名のところに、2つ(会員IDとパスワード)指定しないといけないという捉え方でよろしいのですよね?


ん〜と……パラメータ指定した項目を両方ともIsDBNull……変だ……。
それでは敢えて、逆に質問しますけど、
コード:
SelCmd.Parameters["会員ID"].Value=Text1.Text;

SelCmd.Parameters["パスワード"].Value=Text2.Text;


としている目的って、一体何ですか?
また、なぜこの2つの項目をIsDBNullで調べたいのですか?

[ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2003-12-03 17:44 ]
rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2003-12-03 17:33
今日は

そうです。
dr.GetOrdinal("会員ID")
dr.GetOrdinal("パスワード")
となります。
又は、
DR[1].ToString()やDR[2].ToString()の
1や2を直接使っても出来ます。
にしお
常連さん
会議室デビュー日: 2003/12/01
投稿数: 44
投稿日時: 2003-12-03 21:45
あ!!なるほど。皆様にご意見をいただきやっとわかった気がします。
Jitta様のご意見、『会員ID』と『パスワード』が一致する行が2つ以上あるはずないですよね? というのはまさにその通り。
ぢゃん♪様がおっしゃるようにこのプログラムがおかしいと感じるのも当然ですね。
rvmx様、答えにくい質問に親身に答えていただきまことにありがとうございます。
おかげさまでとても勉強させていただきました。
今回は、Jitta様の
SelCmd.Parameters.Add("会員ID");
SelCmd.Parameters.Add("パスワード");
SelCmd.Parameters["会員ID"].Value=Text1.Text;
SelCmd.Parameters["パスワード"].Value=Text2.Text;
SelCmd.Connection.Open();
OleDbDataReader dr=SelCmd.ExecuteReader();
if (dr.Read()) {
// データがあった
} else {
// データがなかった
}
というものを使用して完成しました。
今回返信をいただいた方に感謝いたします。
本当にありがとうございました。
これからもどうぞよろしくお願いいたします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-12-03 22:27
 すみません、同じ問題に悩むほかの方々のために、差し支えなければSQL文をアップしていただけないでしょうか。何人かの方が、それがないために混乱されているようです。だいたい予想はつきますが。近ければレス不要。

SelCmd.CommandText = "SELECT * FROM 会員名簿マスタ WHERE 会員ID = ? AND パスワード = ?";
SelCmd.Parameters.Add("会員ID");
SelCmd.Parameters.Add("パスワード");
SelCmd.Parameters["会員ID"].Value=Text1.Text;
SelCmd.Parameters["パスワード"].Value=Text2.Text;
SelCmd.Connection.Open();
OleDbDataReader dr=SelCmd.ExecuteReader();
if (dr.Read()) {
// データがあった=認証成功
} else {
// データがなかった=認証失敗
}



それから、配列は0から始まります。1からではありません。要素が2個あれば、使用できるのは0と1で、1と2ではありません。ちょっと気になったので。


#前人未到の1000こ目の投稿
にしお
常連さん
会議室デビュー日: 2003/12/01
投稿数: 44
投稿日時: 2003-12-04 02:50
SQLまさにその通りです。
ありがとうございます。
配列の件、失礼しました・・・。
hiroko
常連さん
会議室デビュー日: 2003/11/26
投稿数: 23
投稿日時: 2003-12-07 23:04
da_login.SelectCommand.Parameters["会員ID"].Value=txt_id.Text;
da_login.Fill(ds_login);
  string loginpass = ds_login.Tables["会員名簿マスタ"].Rows[0]["パスワード"];
if(txt_pwd.Text == loginpass)
{
ibtn_to_kaihi.Visible=true;
ibtn_pwd.Visible=true;
ibtn_m_info.Visible=true;
ibtn_retreat.Visible=true;
}
という形で認証を行っているのですが、login.Tables["会員名簿マスタ"].Rows[0]["パスワード"];のところで、型 'object' を型 'string' に暗黙的に変換できません。というエラーが出ます。対策のヒントお教えていただけないでしょか?
よろしくお願いいたします。

スキルアップ/キャリアアップ(JOB@IT)