Неправильная попытка чтения, когда данные отсутствуют
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 [email protected]");
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.
Скажите, пожалуйста, правильно ли утверждение "если" или нет.........
И как удалить ошибку?
Ответы
Ответ 1
Чтобы получить результат, вы должны вызвать 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
}
Ответ 2
Вы должны позвонить dr.Read()
, прежде чем пытаться прочитать какие-либо данные. Этот метод вернет false, если читать нечего.
Ответ 3
Я бы поставил, чтобы убедиться, что первые строки SqlDataReader вернулись:
SqlDataReader dr = cmd10.ExecuteReader();
if (dr.HasRows)
{
...
}
Ответ 4
У меня просто была эта ошибка, я называл dr.NextResult()
вместо dr.Read()
.
Ответ 5
Я использовал код ниже, и это сработало для меня.
String email="";
SqlDataReader reader=cmd.ExecuteReader();
if(reader.Read()){
email=reader["Email"].ToString();
}
String To=email;
Ответ 6
У меня было 2 значения, которые могли содержать нулевые значения.
while(dr.Read())
{
Id = dr["Id"] as int? ?? default(int?);
Alt = dr["Alt"].ToString() as string ?? default(string);
Name = dr["Name"].ToString()
}
разрешил проблему