2016-01-13 3 views
0

Я хочу создать C# хелпер из хранимой процедурыПринять значение из хранимой процедуры

Сохраненная процедура конца кода.

Когда я запускаю код у меня есть процедура ошибки или функция имеет слишком много аргументов specifield

public int xda_sp_GetTagWithComponent(string ComponentNo) 
{ 
    SqlConnection conn = new SqlConnection(string.Format("Data Source={0};Password={1};User ID={2};Initial Catalog={3};Connection Timeout={4}", DataSource, Password, UserID, InitialCatalog, ConnTimeOut)); 
    int ReturnResult; 
    try 
    { 
     conn.Open(); 
     // 1. SP name 
     SqlCommand cmd = new SqlCommand("xda_sp_GetTagWithComponent", conn); 

     // 2. to execute a stored procedure 
     cmd.CommandType = CommandType.StoredProcedure; 

     // 3. add parameter 
     cmd.Parameters.Add("@ComponentSerialNo", SqlDbType.VarChar, 16).Direction = ParameterDirection.Input; 
     cmd.Parameters["@ComponentSerialNo"].Value = ComponentNo; 

     cmd.Parameters.Add("@SerialNo", SqlDbType.VarChar, 16).Direction = ParameterDirection.Output; 
     cmd.Parameters["@SerialNo"].Value = ""; 

     cmd.Parameters.Add("@returnResult", SqlDbType.Int, 100).Direction = ParameterDirection.Output; 

     //4. Execute 
     cmd.ExecuteNonQuery(); 

     //5. Get Result 
     ReturnResult = Convert.ToInt32(cmd.Parameters["@returnResult"].Value); 
    } 

    catch 
    { 
     ReturnResult = 0; 
    } 

    finally 
    { 
     // Close the connection 
     if (conn != null) 
     { 
     conn.Close(); 
     } 
    } 

    return ReturnResult; 
} 

enter image description here

+0

Можете ли вы опубликовать конкретную ошибку, что вы ИЮВЕ нг? – StephenG

+0

... вы можете вставить код хранимой процедуры ....? ... –

+0

Ваш второй параметр имеет направление вывода, не должно ли это InputOutput? –

ответ

0

Вы устанавливаете последний параметр как ParameterDirection.Output, но это означает, что хранимая процедура должна объявить он как OUTPUT в списке входящих параметров. Что-то вроде этого

CREATE PROCEDURE xda_sp_GetTagWithComponent 
    @ComponenSerialNo varchar(16), 
    @SerialNo varchar (16), 
    @returnResult INT OUT 
AS 
    ..... 

Но, если вы, вместо этого, есть только первые два параметра, и дано имя, вы хотите присвоить @returnResult значение оператора возврата внутри хранимой процедуры, то вы должны объявить его в

cmd.Parameters.Add("@returnResult", SqlDbType.Int).Direction = 
            ParameterDirection.ReturnValue; 
0
cmd.Parameters.Add("@SerialNo", SqlDbType.VarChar, 16).Direction = ParameterDirection.Output; 
      cmd.Parameters["@SerialNo"].Value = ""; 

Вместо этого используйте

cmd.Parameters.Add("@SerialNo", SqlDbType.VarChar, 16).Direction = ParameterDirection.InputOutput; 
       cmd.Parameters["@SerialNo"].Value = ""; 
Смежные вопросы