Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 存储库工作单元模式中的SqlParameters_C#_.net 4.5 - Fatal编程技术网

C# 存储库工作单元模式中的SqlParameters

C# 存储库工作单元模式中的SqlParameters,c#,.net-4.5,C#,.net 4.5,在my Repository.cs中,我有以下方法 /*** Execute stored procedure ***/ public virtual void ExecuteProcedure(String procedureCommand, params SqlParameter[] sqlParams) { Ctxt.Database.ExecuteSqlCommand(procedureCommand, sqlParams); } 我从我的客户机存储库中将其称为: public b

在my Repository.cs中,我有以下方法

/*** Execute stored procedure ***/
public virtual void ExecuteProcedure(String procedureCommand, params SqlParameter[] sqlParams)
{
  Ctxt.Database.ExecuteSqlCommand(procedureCommand, sqlParams);
}
我从我的客户机存储库中将其称为:

public bool CanLock(int spvId)
{
  SqlParameter[] parameter = { new SqlParameter ("spvId", spvId) };
  bool isLock = ExecuteProcedure("Exec prc_SitePartVrsn_CanLock {0}", parameter);
  return false;
}
我收到错误消息:

ExecuteProcess具有无效参数

有人能建议如何传递参数吗

另外,
prc\u SitePartVrsn\u CanLock
有一个输出参数,请告知如何传递输出参数并获取要在客户端存储库中使用的值?

您应该尝试以下操作:

public bool CanLock(int spvId)
{
  SqlParameter[] parameter = { new SqlParameter ("spvId", spvId) };
  bool isLock = ExecuteProcedure("Exec prc_SitePartVrsn_CanLock @spvId", parameter);
  return false;
}

您必须在sql命令中命名参数。

我使用以下方法解决了此问题:

    public bool CanLock(int spvId)
    {
        SqlParameter parameter = new SqlParameter("spvId", SqlDbType.Int);
        parameter.Value = spvId;

        ExecuteProcedure("Exec prc_SitePartVrsn_CanLock {0}", parameter);
        return false;
    }

但是有没有更好的方法来处理这个问题,比如一次创建一个参数数组?

与ExecuteProcess中的{0}有关(“Exec prc_SitePartVrsn_CanLock{0}”,parameter)命令?很抱歉,这不起作用,参数类型有问题,或者与params关键字有关可能
new SqlParameter(“@spvId”,spvId)
?和
params
允许您直接传递
SqlParameter
。无需事先创建数组(尽管这样做不会导致错误)。这意味着您可以执行:
ExecuteProcedure(“Exec prc_SitePartVrsn\u CanLock@spvId”,new SqlParameter(“@spvId”,spvId))