企业数据应用程序块,存储过程和具有默认值的参数

问题描述

|| 我们有一个ASP.NET 2.0应用程序,它大量使用企业库数据访问应用程序块。总之,有一个帮助程序例程,该例程接受SP的参数数组以及SP的名称,然后调用该SP。如此有效
  object[] parameters = string.IsNullOrEmpty(paramsString) ? null : jss.Deserialize<object[]>(paramsString);

DbCommand procProcess = Database.GetStoredProcCommand(_storedProc,parameters);
我们也有很多存储过程依赖于参数的默认值。通常,这些具有默认值的参数始终位于存储的proc定义的末尾,例如
CREATE PROCEDURE MyProc
@param1 int,@param2 int,@param3 int = 0
AS
....
我希望能够通过仅传递param1和param2的值来调用proc。但是,当然,如果我的参数只有两个参数,则此调用
DbCommand procProcess = Database.GetStoredProcCommand(_storedProc,parameters);
仍会带回param3,但不会为其分配默认值。因此,电话
 procProcess.ExecuteNonQuery();
将失败。 谁能帮我忽略指定默认值的这些参数,或者以某种方式通过关键字“ \ default \”的SQL等效项传递给我?     

解决方法

我自己解决了。基本上,我将代码重构为接受参数的对象数组,然后将其传递给
DbCommand procProcess = Database.GetStoredProcCommand(_storedProc,parameters);
调用或接受自定义类数组的序列化表示形式,该类仅列出参数名称及其值。然后代码将反序列化此自定义类数组中传递的内容,并执行类似的操作
DbCommand procProcess = Database.GetStoredProcCommand(_storedProc);

                    for (int i = 0; i < typedparams.Length; i++)
                        procProcess.Parameters.Add(new SqlParameter(typedparams[i].ParamName.StartsWith(\"\\\\@\") ? typedparams[i].ParamName : \"@\" + typedparams[i].ParamName,typedparams[i].ParamValue));
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...