Sql server 2008 r2 将默认值传递到新的SqlParameter()中

Sql server 2008 r2 将默认值传递到新的SqlParameter()中,sql-server-2008-r2,c#,Sql Server 2008 R2,C#,如何将默认值传递到MVC4.NET中的存储过程中? 我有这个密码 return Database.SqlQuery<Program>( "spGetProgram @p1,@p2,@p3,@p4", new SqlParameter("p1", (object)ID ?? "DEFAULT"), new SqlParameter("p2", (object)displayStart ??

如何将默认值传递到MVC4.NET中的存储过程中? 我有这个密码

return Database.SqlQuery<Program>(
                "spGetProgram @p1,@p2,@p3,@p4",
                new SqlParameter("p1", (object)ID ?? "DEFAULT"),
                new SqlParameter("p2", (object)displayStart ?? "DEFAULT"),
                new SqlParameter("p3", (object)displayLength ?? "DEFAULT"),
                new SqlParameter("p4", (object)searchString ?? "DEFAULT")
            ).ToList();
return Database.SqlQuery(
“spGetProgram@p1、@p2、@p3、@p4”,
新的SqlParameter(“p1”,(对象)ID??“默认值”),
新的SqlParameter(“p2”,(对象)displayStart??“默认值”),
新的SqlParameter(“p3”,(对象)显示长度??“默认值”),
新的SqlParameter(“p4”,(对象)搜索字符串??“默认值”)
).ToList();
我试过了

  • “默认值”
    -->错误:转换失败
  • null
    -->错误:未传递参数
  • DBNull.Value
    -->它传递N''值,但此值不是默认值

我怎样才能做到这一点呢?

我找到了一个解决方法,但它只适用于一个默认参数

return Database.SqlQuery<int>(
                "spGetProgramsCount " + (searchString != null ? "@p1" : ""),
                (searchString != null ? new SqlParameter("p1", searchString) : null)
            ).First();

我相信这是因为在过程中使用逗号,我不知道如何处理它://

我找到了一个解决方法,但它只适用于一个默认参数

return Database.SqlQuery<int>(
                "spGetProgramsCount " + (searchString != null ? "@p1" : ""),
                (searchString != null ? new SqlParameter("p1", searchString) : null)
            ).First();

我相信这是因为过程中的逗号,我不知道如何处理://

如果您知道形式参数的名称(正如在
CREATE procedure
中声明的那样),您可以使用您的方法,如果您对SP的调用略有不同:而不是
spGetProgram@p1、@p2、@p3,@p4
do
spGetProgram@formalPar1=@p1、@formalPar2=@p2、@formalPar3=@p3、@formalPar4=@p4
。这样你就可以在任何位置省略一个参数。当然还有一个更简单的方法:不用
(searchString!=null?@p1,:“”)
,你可以做
(searchString!=null?@p1,:“DEFAULT,”)
。我已经在数据库级别重写了它,但谢谢你,它将来会有所帮助的!如果您知道形式参数的名称(正如在
CREATE PROCEDURE
中声明的那样),那么如果您调用SP的方式略有不同,您可以使用您的方法:而不是
spGetProgram@p1、@p2、@p3、@p4
do
spGetProgram@formalPar1=@p1、@formalPar2=@p2、@formalPar3=@p3、@formalPar4=@p4
。这样你就可以在任何位置省略一个参数。当然还有一个更简单的方法:不用
(searchString!=null?@p1,:“”)
,你可以做
(searchString!=null?@p1,:“DEFAULT,”)
。我已经在数据库级别重写了它,但谢谢你,它将来会有所帮助的!
When executing a command, parameters must be exclusively database parameters or values.