gpt4 book ai didi

sql-server - SqlCommand,传递可能为空的内容

转载 作者:行者123 更新时间:2023-12-02 02:21:02 25 4
gpt4 key购买 nike

我有一个 SQL 命令,我被要求修改,我遇到了一些麻烦,因为我传递给 SQL 的内容现在可以为空。如果我要传递一个值,我可以依赖 SQL 中的 columnName = @parameterName,但是对于 NULL,我无法传递 null 或 DBNull 并正确解析它。

这是 SQL 伪代码:

SELECT
Columns
FROM
ClientSetup
WHERE
Client_Code = @ClientCode AND
Package_Code = @PackageCode AND
Report_Code = @ReportCode

问题是现在@ReportCode 可以有效地为 NULL。在我设置 SqlCommand 的 C# 代码中,我可以输入:

cmd.Parameters.Add("@ReportCode", SqlDBType.VarChar, 5).Value = reportType;
//reportType is a string, which can be null

但是,如果 reportType 为 null,我需要在 SQL 中使用 Report_Code IS NULL,而不是 Report_Code = @reportCode。

我找到的解决方案是将最后一个 where 子句更改为以下内容:

((@ReportCode IS NULL AND Report_Code IS NULL) OR Report_Code = @ReportCode)

和参数短语到

cmd.Parameters.Add("@ReportCode", SqlDBType.VarChar, 5).Value = string.IsNullOrEmpty(reportType) ? System.DBNull : reportType;

这是有效的,但我想知道是否有人知道在将内容从 .NET 代码传递给 SQL 时处理可为 null 的参数的更简洁或更好的方法。

最佳答案

简短的回答是不,SqlClient API 要求您传入 DbNull.Value对于 NULL 参数值。

但我对您如何处理 NULL 有一些疑问。对于您使用 string.IsNullOrEmpty 的一个,这意味着您将 emtpy 字符串视为 NULL。这是有问题的,数据库中可能存在合法的空字符串值。

我的第二个问题是在数据库中匹配 NULL 的逻辑。通常不传递 NULL 参数意味着请求对任何值感兴趣,而不是专门对 NULL 值感兴趣。我并不是说您将 NULL 参数与 NULL 值匹配的逻辑有缺陷,我只是想确保您知道自己在做什么。

关于sql-server - SqlCommand,传递可能为空的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8158304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com