2015-06-05 5 views
0

Я создал проект linq2sql, в котором у меня есть метод расширения для вызова SP. Этот метод расширения имеет несколько особенностей:Выходные параметры сохраненной процедуры не обновляются

  • Он может вызывать SP с табличными значениями.
  • Он может принимает как входные и выходные параметры
  • Она будет обрабатывать множественный набор результатов

метод расширения -

public partial class TestLinq2SqlDataContext : DataContext 
{ 
public IMultipleResults ExceuteProcedure(string spName, IEnumerable<SqlParameter> parameters, SqlConnection sqlConnection, out SqlDataReader reader) 
{ 
    reader = null; 
    try 
    { 
     sqlConnection.Open(); 
     var cmd = new SqlCommand 
      { 
       Connection = sqlConnection, 
       CommandText = spName, 
       CommandType = CommandType.StoredProcedure 
      }; 

     cmd.Parameters.AddRange(parameters.ToArray()); 
     reader = cmd.ExecuteReader(); 
     return Translate(reader); 
    } 
    catch (Exception) 
    { 
    } 
    return null; 
} 
} 

Я зову ниже SP -

CREATE PROCEDURE USP_OutPutParameterCheck(
    @Id int OUTPUT, 
    @Name nvarchar(50) OUTPUT) 
AS 
BEGIN 
    SET @Id = 12 SET @Name = N'NameSet for OutputParameter' 
END 

Мои Код C#

public static void Main(){ 
context = new TestLinq2SqlDataContext(); 

#region USP_OutPutParameterCheck 

var connection1 = context.Connection as SqlConnection; 
SqlDataReader dataReader1; 
var outParam1 = new SqlParameter 
{ 
    Direction = ParameterDirection.Output, 
    Value = "Abc", 
    DbType = DbType.String, 
    ParameterName = "@Name" 
}; 
var outParam2 = new SqlParameter 
{ 
    Direction = ParameterDirection.Output, 
    Value = 1, 
    DbType = DbType.Int32, 
    ParameterName = "@Id" 
}; 
var parameters11 = new[] 
    { 
     outParam1, 
     outParam2 
    }; 
var data21 = context.ExceuteProcedure("USP_OutPutParameterCheck", parameters11, connection1, out dataReader1); 
} 

Теперь, когда я проверяю значение выходных параметров в режиме отладки я получаю «значения s идеально но для @Name параметра я только получаю „The @Id N“ значения вместо „NameSet для OutputParameter“

Может ли кто-нибудь помочь мне, где я ошибаюсь?

Благодаря

UPDATE:

Добавление Скриншот, видя значения параметров в режиме отладки - debug mode

ответ

1

Я думаю, что Вы должны specifcy от размера outParam1.

См: https://msdn.microsoft.com/en-us/library/system.data.common.dbparameter.size(v=vs.110).aspx

Для двунаправленных и выходных параметров и возвращаемых значений, необходимо установить значение размера. Это не требуется для входных параметров, а , если явно не задано, это значение выводится из фактического размера указанного параметра при выполнении параметризованного оператора.

+0

Спасибо, это сработало .. :) – arpitbakshi

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