2

C# を使って ASP.NET を学習しているのですが、認証コードを次のように書いてみました。

SqlCommand command = new SqlCommand("Select [ID] from [Inspector] WHERE [ID] ='111' AND [Password] ='111';", conn);

SqlDataReader dr = command.ExecuteReader();

if (dr[0].ToString() == username)
{
Session["UserAuthentication"] = username;
Session.Timeout = 1;
Response.Redirect("About.aspx");
}
else{
// ...
}

はSQL ServerIDの型です。numeric

問題は、常に例外が発生することです:

データが存在しない場合の読み取りの試みは無効です。

この部分では: if (dr[0].ToString() == username).

正確な SQL ステートメントを直接実行しようとしましたが、結果を取得できます。

4

2 に答える 2

7

次のようなコードを使用して、返されたリーダーの行を反復処理する必要があります。

SqlDataReader dr = command.ExecuteReader();

if(dr.Read())
{
    if (dr[0].ToString() == username)
    {
        Session["UserAuthentication"] = username;
        Session.Timeout = 1;
        Response.Redirect("About.aspx");
    }
    else {
       // ...
    }
}

実際にデータを読み取る.Read()にはSqlDataReader、少なくとも 1 回呼び出す必要があります。

ある行と同じ数の行を読み取る予定がある場合は、次を使用する必要があります

while (dr.Read())
{
     .....
}

返される複数の行を処理します。

于 2013-11-08T17:18:13.217 に答える
4

データの読み取りを開始する前に、DataReader を最初の行に移動する必要があります。
コールしRead()ます。

于 2013-11-08T17:17:57.400 に答える