У меня есть простое подключение к SQL Server, который не работает. Я пытаюсь прочитать данные из него, используя SqlDataReader
в C#.SqlDataReader неожиданно возвращает null
Вот код:
bool ok = false;
SqlConnection con = new SqlConnection();
con.ConnectionString = @"********";
SqlCommand cmd = new SqlCommand();
cmd.Parameters.AddWithValue("@a", uname);
cmd.Parameters.AddWithValue("@b", pass);
cmd.CommandText = @"SELECT username FROM admins WHERE pass='@b'";
cmd.Connection = con;
SqlDataReader r;
con.Open();
r = cmd.ExecuteReader();
r.Read();
string n;
n = r.GetString(0);
if (n != null)
{
ok = true;
}
con.Close();
if (ok)
{
Session["admin"] = uname;
Response.Redirect("admin_page.aspx");
}
else
{
eror.Text = "An eror occured";
Response.Redirect("index.aspx#work");
}
Примечание: что в приведенном выше строка кода «uname» и «передать», безусловно, не равно нулю.
Примечание №2: Я попытался запустить r.read()
в цикле while (хотя невозможно иметь более одной строки) ---> тот же результат.
Я попытался запустить этот код в пошаговом режиме, и кажется, что он распадается на этой линии:
n = r.GetString(0);
С этим исключением:
исключение типа «System.InvalidOperationException» произошло в System.Data.dll, но не обрабатывался в коде пользователя
Дополнительная информация: Неверная попытка прочитать, когда данных нет.
Я как бы потерял здесь. Я знаю, что это, наверное, простая вещь, которую я пропустил здесь, я просто не могу ее найти. Есть идеи?
'@ a' даже не используется в вашем запросе, и ваша проблема в том, что теперь строки возвращаются, поэтому вы получаете *** Неверная попытка прочитать, когда данные отсутствуют *** – Amit
Пара вещей. Почему у вас есть параметр @a, когда вы его не используете? Кроме того, если вы добавляете параметры, вы не должны добавлять «символы» вручную в свой запрос. Он будет заботиться автоматически. Вы должны проверить, будет ли r.Read успешным (используйте возвращаемое значение), если это не ваши данные не найдены в базе данных. Я подозреваю, что это проблема. – Saragis