2015-10-13 3 views
0

Я новичок в C# и SQL Server, и я написал этот запрос для создания хранимой процедуры в SQL Server:Как получить возвращаемое значение хранимой процедуры SQL Server в C#?

create procedure newBehzad 
    @id bigint 
as 
    DECLARE @ResultValue int 

    select * 
    from TABLEA 
    where id > @id 

    SET @ResultValue = -5 
go 

Все работает, и я написал это C# код для вызова этой хранимой процедуры и возвращать одно значение:

using (var conn = new SqlConnection(connectionString)) 
using (var command = new SqlCommand("newBehzad", conn) 
{ 
    CommandType = CommandType.StoredProcedure 
}) 
{ 
    conn.Open(); 

    command.Parameters.Add("@id", SqlDbType.BigInt).Value = 2; 
    command.Parameters.Add("@ResultValue", SqlDbType.Int); 

    SqlParameter retval = command.Parameters.Add("@ResultValue", SqlDbType.Int); 
    retval.Direction = ParameterDirection.ReturnValue; 

    retunvalue = (string)command.Parameters["@ResultValue"].Value; 

    //SqlParameter retval = sqlcomm.Parameters.Add("@b", SqlDbType.VarChar); 
    command.ExecuteNonQuery(); 
    conn.Close(); 
} 

MessageBox.Show(returnValue); 

Но когда я запустить приложение C# Windows, я получаю эту ошибку:

Procedure or function newBehzad has too many arguments specified.

Как я могу решить это? Благодарю.

+0

ResultValue не является параметром хранимой прок. Что делает хранимый продукт? Он выбирает данные, но вы производите запрос. Нонсенс. –

+0

@GiorgiNakeuri спасибо за ответ, у моей TABELA есть поле идентификатора идентичности (1,1), и когда вы выбираете ту TABLEA, возвращаете последний id – user3671271

ответ

1

Изменить Вы процедура:

create procedure newBehzad @id bigint, @ResultValue int OUT 
as 
SET @ResultValue = 0 
BEGIN 
    select *from TABLEA 
    where id>@id 
    SET @ResultValue = -5 
END 
go 

Пожалуйста, попробуйте somethink так:

object returnValue = null; 
      using (var conn = new System.Data.SqlClient.SqlConnection(AbaseDB.DBFactory.GetInstance().GetConnectionString())) 
      { 
       using (System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand("newBehzad", conn) { CommandType = CommandType.StoredProcedure }) 
       { 
        conn.Open(); 
        command.Parameters.Add("@id", SqlDbType.BigInt).Value = 2; 
        command.Parameters.Add("@ResultValue", SqlDbType.Int).Direction = ParameterDirection.Output; 

        command.ExecuteNonQuery(); 

        returnValue = command.Parameters["@ResultValue"].Value; 

        conn.Close(); 
       } 
       if (returnValue != null) 
        MessageBox.Show(returnValue.ToString()); 
      } 
+0

спасибо за ответ, я получаю сообщение об ошибке ExecuteScala(), какую ссылку? – user3671271

+0

System.Data (w System.Data.dll) System.Data.SqlClient (w System.Data.SqlClient.dll) – Arkadiusz

+0

Я получаю эту ошибку: Дополнительная информация: Указанный приведение недействительно. – user3671271

1
using (var conn = new SqlConnection(connectionString)) 
      using (var command = new SqlCommand("newBehzad", conn) 
      { 
       CommandType = CommandType.StoredProcedure 
      }) 
      { 
       conn.Open(); 
       command.Parameters.Add("@id", SqlDbType.BigInt).Value = 2; 
       // command.Parameters.Add("@ResultValue", SqlDbType.Int); Comment this line 


       SqlParameter retval = command.Parameters.Add("@ResultValue", SqlDbType.Int); 
       retval.Direction = ParameterDirection.ReturnValue; 

       retunvalue = (string)command.Parameters["@ResultValue"].Value; 

       //SqlParameter retval = sqlcomm.Parameters.Add("@b", SqlDbType.VarChar); 
       command.ExecuteNonQuery(); 
       conn.Close(); 
      } 
      MessageBox.Show(returnValue); 
+0

, создайте мою ссылку, но храните процедуру return null, почему? – user3671271

1

Прежде всего, вам нужно изменить хранимую процедуру для возврата значения:

create procedure newBehzad @id bigint 
as 
    DECLARE @ResultValue int 
    select *from TABLEA 
    where id>@id 
    SET @ResultValue = -5 

    Return @ResultValue 
go 

Затем возьмите его с:

using (var conn = new SqlConnection(connectionString)) 
{ 
    conn.Open();   

    using (var cmd = new SqlCommand("newBehzad", conn) 
    { 
     cmd.CommandType = CommandType.StoredProcedure; 

     SqlParameter retval = new SqlParameter(); 
     retval.Direction = ParameterDirection.ReturnValue; 

     cmd.Parameters.Add("@id", SqlDbType.BigInt).Value = 2; 
     cmd.Parameters.Add(retval); 

     cmd.ExecuteNonQuery(); 

     returnValue = (int)retval.Value; 
    } 
} 

Но я действительно не могу, почему вы выборки данных в сохраненном прок ...

+0

напишите свой код C# complete – user3671271

+0

См. Правки ...... –

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