无数据存在时无效尝试读取
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; }
当我debugging,直到第7行,这是可以的,但之后,博士抛出一个exception: Invalid attempt to read when no data is present.
这是不可能的,因为我有用户名= sumant表中的数据。 请告诉我“if”陈述是否正确………
如何删除错误?
你必须调用DataReader.Read
来获取结果:
SqlDataReader dr = cmd10.ExecuteReader(); if (dr.Read()) { // read data for first record here }
DataReader.Read返回一个布尔值,表示是否有更多的数据块要读取,所以如果你有多个结果,你可以这样做:
while (dr.Read()) { // read data for each record here }
在尝试读取任何数据之前,必须先调用dr.Read()
。 如果没有东西可读,那么这个方法将返回false。
我会检查是否SqlDataReader有行首先返回:
SqlDataReader dr = cmd10.ExecuteReader(); if (dr.HasRows) { ... }
我只是有这个错误,我打电话dr.NextResult()
而不是dr.Read()
。
我用下面的代码,它为我工作。
String email=""; SqlDataReader reader=cmd.ExecuteReader(); if(reader.Read()){ email=reader["Email"].ToString(); } String To=email;
我有2个值可以包含空值。
while(dr.Read()) { Id = dr["Id"] as int? ?? default(int?); Alt = dr["Alt"].ToString() as string ?? default(string); Name = dr["Name"].ToString() }
解决了这个问题