我创建了一个linq2sql项目,其中我有一个用于调用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);
}
现在当我在调试模式中检查输出参数的值时,我得到的@Id
值完美
但对于@Name
参数,我只能获得&#39; N&#39; 值,而不是&#39; NameSet for OutputParameter&#39;
任何人都可以帮助我解决我在哪里出错吗?
由于
更新:
在调试模式下查看参数值时添加屏幕截图 -
答案 0 :(得分:1)
我认为您必须指定outParam1的大小。
请参阅:https://msdn.microsoft.com/en-us/library/system.data.common.dbparameter.size(v=vs.110).aspx
对于双向和输出参数以及返回值,您必须 设置Size的值。输入参数不需要这样做,并且 如果没有明确设置,则从实际大小推断出该值 执行参数化语句时的指定参数。