使用显式参数

时间:2015-11-12 20:50:27

标签: sql-server entity-framework stored-procedures

我有一个EF6实现,我目前正在处理执行存储过程时的序数参数调用。我知道这是由于各种原因改变参数位置时给出的错误。

我有这个帮助方法,可以更容易地调用存储过程。

public static IEnumerable<T> ExecuteSProc<T> (this DbContext ctx , string schema , string intent , string sproc , params SqlParameter[] para)
{
    return ctx.Database.SqlQuery<T>("Execute " + schema + "." + intent + "_" + sproc, para).ToArray();
}

当参数本身不移动时,这通常很有效。

以上扩展程序的示例调用:

return this.ExecuteSProc<QueuedJob>( "SCHEMA" , "PREFIX" ,
    "SPROC @Parm1, @Parm2" ,
        new SqlParameter( "@Parm1" , SqlDbType.Int ) { Value = parm1 } ,
        new SqlParameter( "@Parm2" , SqlDbType.VarChar , 200 ) { Value = parm2 } );

等效序数/隐式T-SQL执行:

Execute SCHEMA.PREFIX_SPROC @parm1, @parm2

T-SQL显式执行:

Execute SCHEMA.PREFIX_SPROC @Parm1=@parm1, @Parm2=@parm2

我需要知道的是如何使用参数显式调用存储过程?

当我尝试使用上面的显式形式设置存储过程签名时,行为类似于序数/隐式签名。通过将参数移动到数据库中存储过程的不同位置进行测试。

0 个答案:

没有答案