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が例外をスローします:Invalid attempt to read when no data is present.
テーブルにusername = sumantのデータがあるため、これは不可能です。 「if」ステートメントが正しいかどうかを教えてください.........
そして、どのようにエラーを削除しますか?
_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
}
_
データを読み取る前に、dr.Read()
を呼び出す必要があります。読み取るものがない場合、そのメソッドはfalseを返します。
このエラーが発生しました。dr.NextResult()
の代わりにdr.Read()
を呼び出していました。
SqlDataReaderに最初に返される行があるかどうかを確認します。
SqlDataReader dr = cmd10.ExecuteReader();
if (dr.HasRows)
{
...
}
以下のコードを使用しましたが、うまくいきました。
String email="";
SqlDataReader reader=cmd.ExecuteReader();
if(reader.Read()){
email=reader["Email"].ToString();
}
String To=email;
Null値を含む可能性のある2つの値がありました。
while(dr.Read())
{
Id = dr["Id"] as int? ?? default(int?);
Alt = dr["Alt"].ToString() as string ?? default(string);
Name = dr["Name"].ToString()
}
問題を解決しました