Получить значение хранимой процедуры с помощью SQL Server Express

118
9

У меня есть хранимая процедура, которая проверяет имя пользователя и пароль из таблицы базы данных SQL Server. Хранимая процедура возвращает 1, если имя пользователя и пароль верны или возвращает 0. Вот код. Не могли бы вы рассказать мне, как я могу получить 1 или 0 PLS? rdr.toString не работает.

SqlCommand cmd = new SqlCommand("sp_IsValidLogon", conn);

cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add(new SqlParameter("@Username", textBox1.Text));
cmd.Parameters.Add(new SqlParameter("@Password", textBox2.Text));

rdr = cmd.ExecuteReader();
label1.Text = rdr.ToString();

спросил(а) 2021-01-19T18:31:39+03:00 6 месяцев, 2 недели назад
1
Решение
109

Попробуй это

    label1.Text=cmd.ExecuteScalar().ToString();

вместо этого:

   rdr = cmd.ExecuteReader();
label1.Text=rdr.ToString();

ответил(а) 2021-01-19T18:31:39+03:00 6 месяцев, 2 недели назад
100

Это должно работать нормально:

if (rdr.Read())
label1.Text = rdr[0].ToString();

Сначала вы должны вызвать .Read() один раз, чтобы "инициализировать" считыватель данных, а затем принять значение первого поля - при условии, что вся ваша хранимая процедура вернется, она будет работать.

Вы можете сделать все это без чтения:

label1.Text = cmd.ExecuteScalar().ToString();

ExecuteScalar() существует именно для этой цели - прочитайте одно значение из базы данных.

ответил(а) 2021-01-19T18:31:39+03:00 6 месяцев, 2 недели назад
63

Если вы возвращаете его из sproc с помощью инструкции RETURN, вам нужно добавить еще один параметр INTEGER в SqlCommand в вашем.NET-коде с помощью параметра ParameterDirection = ParameterDirection.ReturnValue.

Затем, после выполнения sproc, просто получите значение этого параметра из SqlCommand.

ответил(а) 2021-01-19T18:31:39+03:00 6 месяцев, 2 недели назад
45

Я предполагаю, что ваша хранимая процедура имеет фактический оператор "return", который возвращает 0 или 1. В этом случае добавьте sqlparameter в свою команду с параметром "Указатель", установленным в "ReturnValue".

ExecuteNonQuery должен отлично работать в этом случае.

ExecuteScalar возвращает значение первого столбца первой строки. Если вы не возвращаете 0 или 1 из хранимой процедуры в качестве результата запроса, то это не то, что вы хотите.

Однако, не видя кода хранимой процедуры, я не могу определить, какой из двух подходов вам нужен.

ответил(а) 2021-01-19T18:31:39+03:00 6 месяцев, 2 недели назад
46

Используйте ExecuteScalar insted. Пример здесь: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar.aspx

ответил(а) 2021-01-19T18:31:39+03:00 6 месяцев, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема