无数据存在时无效尝试读取

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() } 

解决了这个问题