2012-01-17 4 views
0

У меня есть следующая хранимая процедура на сервере sql, и я пытаюсь принять значение разрешения с C#.Получить значение из хранимой процедуры

CREATE PROCEDURE [dbo].[GetPermission] 
@userName varchar(50), 
@permission int output 
AS 
BEGIN 

select @permission = PERMISSION from USERS where UserName = @userName 

END; 

Мой C# код выглядит следующим образом:

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


     cmd.CommandType = CommandType.StoredProcedure; 


     cmd.Parameters.Add(
      new SqlParameter("@UserName", textBox1.Text)); 
     cmd.Parameters.Add(
      new SqlParameter("@permission", "none")); 




     SqlDataReader rdr = null; 

     rdr = cmd.ExecuteReader(); 
     MessageBox.Show(rdr["Permission"].ToString()); 

Но я получаю следующую ошибку на последней строке C# код:

Неверная попытка чтения при отсутствии данных присутствует ,

Любые предложения?

ответ

2

Давайте просто:

первый, удалите параметр @permission выходной, то изменить свой порядок, как это:

CREATE PROCEDURE [dbo].[GetPermission] 
@userName varchar(50) 
AS 
BEGIN 

select PERMISSION from USERS where UserName = @userName 

END; 

и для чтения разрешения, использование ExecuteScalar:

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


cmd.CommandType = CommandType.StoredProcedure; 


cmd.Parameters.Add(
    new SqlParameter("@UserName", textBox1.Text)); 

var permission = (System.Int32)cmd.ExecuteScalar(); 
0

Вы должны установить ParameterDirection параметра разрешения на SqlCommand в ParameterDirection.Output

Кроме того, как вы не в результате набор результатов, нет необходимости использовать ExecuteReader. Вобще:

cmd.ExecuteNonQuery(); 
0

Вы должны Read ваш SqlDataReader:

rdr = cmd.ExecuteReader(); 
if (rdr.HasRows()){ 
    rdr.Read() 
    MessageBox.Show(rdr["Permission"].ToString()); 
    rdr.Close() 
} 

Однако, я не верю, что вам нужно SqlDataReader для этой ситуации. Следующие должны работать:

cmd.Parameters.Add(
      new SqlParameter("@permission", "none")); 
cmd.Parameters["@permission"].Direction = ParameterDirection.Output; 

cmd.ExecuteNonQuery(); 

MessageBox.Show(cmd.Parameters["@permission"].Value); 
+0

Я получаю сообщение об ошибке cmd.Parameters (@per миссия) ..... ошибка "Ошибка Неисключаемый член 'System.Data.SqlClient.SqlCommand.Parameters' не может использоваться как метод" – pikk

Смежные вопросы