101
    private void button1_Click(object sender, EventArgs e)
    {
        string name;
        name = textBox5.Text;
        SqlConnection con10 = new SqlConnection("con strn");
        SqlCommand cmd10 = new SqlCommand("select * from sumant where username=@name");
        cmd10.Parameters.AddWithValue("@name",name);
        cmd10.Connection = con10;
        cmd10.Connection.Open();//line 7
        SqlDataReader dr = cmd10.ExecuteReader();
    }

    if ( textBox2.Text == dr[2].ToString())
    {
        //do something;
    }

7行目までデバッグすると問題ありませんが、その後drは例外がスローされます。

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

表にusername=sumantのデータがあるため、なぜその例外が発生するのかわかりません。

'if'ステートメントが正しいかどうか教えてください。そして、どうすればエラーを修正できますか?

4

6 に答える 6

203

DataReader.Read結果を取得するには、を呼び出す必要があります。

SqlDataReader dr = cmd10.ExecuteReader();
if (dr.Read()) 
{
    // read data for first record here
}

DataReader.Read()読み取るデータのブロックがまだあるかどうかを示すを返すboolため、結果が複数ある場合は、次の操作を実行できます。

while (dr.Read()) 
{
    // read data for each record here
}
于 2009-07-18T14:08:50.767 に答える
17

dr.Read()データを読み取ろうとする前に、電話をかける必要があります。読み取るものがない場合、そのメソッドはfalseを返します。

于 2009-07-18T14:08:39.537 に答える
9

このエラーが発生しました。dr.NextResult()代わりに呼び出していましdr.Read()た。

于 2014-04-27T02:38:07.793 に答える
3

以下のコードを使用しましたが、うまくいきました。

String email="";
    SqlDataReader reader=cmd.ExecuteReader();
    if(reader.Read()){
        email=reader["Email"].ToString();
    }

String To=email;
于 2016-04-23T18:37:27.090 に答える