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. Скажите, пожалуйста, правильно ли утверждение "если" .........
А как убрать ошибку ??
dr.Read()
. Поэтому, если запрос не возвращает записи, ошибка такая же: «Недопустимая попытка чтения при отсутствии данных». Вместо этого используйтеif(dr.Read()){....}
(или цикл, как показано ниже).Вы должны позвонить,
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;
источник
У меня было 2 значения, которые могли содержать нулевые значения.
while(dr.Read()) { Id = dr["Id"] as int? ?? default(int?); Alt = dr["Alt"].ToString() as string ?? default(string); Name = dr["Name"].ToString() }
решил проблему
источник