繁体   English   中英

传递Nullable Integer(int?SomeValue = NULL)作为参数存储过程

[英]Passing Nullable Integer (int? SomeValue = NULL) As Parameter To Stored Procedure

我正在尝试创建一个需要4个参数的存储过程。 这4个参数决定了返回表的外观。

@C_ID参数始终为数字。 @U_ID@P_ID值可以包含有效的数值,或者可以(或应该)作为NULL传递,因此WHERE条件执行或不执行。

ALTER PROCEDURE [dbo].[GetData]
    @C_ID integer,
    @U_ID integer = Null,
    @P_ID integer = Null,
    @SortIndex integer = 1
AS 
BEGIN
    SELECT
        ID, P_ID, U_Name, P_Name, 
        FORMAT(Date_When, 'dd/MM/yyyy hh:mm tt')
    FROM 
        SomeTable
    WHERE 
        C_ID = @C_ID 
        AND (@P_ID IS NULL OR P_ID = @P_ID) 
        AND (@U_ID IS NULL OR U_ID = @U_ID)
   ORDER BY 
        CASE WHEN @SortIndex = 1 THEN -ID 
             ELSE ID 
        END ASC
END

在SQL Server 2014上,以下执行工作正常,没有任何错误:

exec GetData '15', null, null, '1';
exec GetData '15', '1', null, '1';
exec GetData '15', null, '1', '1';
exec GetData '15', '1', '1', '1';
...

但是在C#端,以下代码无法执行:

int? SomeValue = null;
Adapter = new SqlDataAdapter("exec GetData '15'," + SomeValue + ",null,'1';", Connection);
Adapter.Fill(Data);

这给了我一个错误

','附近的语法不正确。

如果我将SomeValue变量更改为1,它可以正常工作。

DBNull.Value只是将参数保留为''也不起作用。

所以问题是:如果可以将可空整数传递给SQL,我将如何能够将可空整数传递给SQL,并且它可以是null和有效数字?

做一些事情:

Adapter = new SqlDataAdapter();

//con is an open SQLConnection
var cmd = new SQLCommand("GetData", con);
cmd.Parameters.Add(new SqlParameter("@C_ID", 15));
cmd.Parameters.Add(new SqlParameter("@U_ID", SomeValue ?? DBNull.Value));
cmd.Parameters.Add(new SqlParameter("@P_ID", SomeValue ?? DBNull.Value));
cmd.Parameters.Add(new SqlParameter("@SortIndex", 1));
cmd.CommandType = CommandType.StoredProcedure;
Adapter.SelectCommand = cmd;
Adapter.Fill(Data);

?? 称为null-coalescing运算符,并检查SomeValue是否为null。 如果是这样,背后的价值? 使用 - 在你的情况下DBNull.Value

正如GSerg已经指出的那样,始终将Little Bobby Tables放在脑后。

编辑: 空 - 合并参考

你尝试过类似的东西吗?

SomeValue ?? "null"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM