我有我一直要求修改SQL命令,我有一些麻烦的事实,就是我传递给SQL现在可以为空。如果我传递一个值,我可以依赖SQL中的columnName = @parameterName,但使用NULL时,我无法传递null或DBNull并使其正确解析。SqlCommand的,路过的东西,可能是空
这里的SQL伪代码:
SELECT
Columns
FROM
ClientSetup
WHERE
Client_Code = @ClientCode AND
Package_Code = @PackageCode AND
Report_Code = @ReportCode
的问题是,现在@ReportCode可以有效地为空。在我设置的SqlCommand我的C#代码,我可以把:
cmd.Parameters.Add("@ReportCode", SqlDBType.VarChar, 5).Value = reportType;
//reportType is a string, which can be null
但是,如果REPORTTYPE是空的,我需要使用Report_Code IS NULL在SQL,而不是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时的可空参数。
的代码是不漂亮,什么要求我做的是不让它漂亮,只是添加额外的功能。在整个项目中,空值在这里被视为“没有”而不是“任何事物”,并且我保持与已有的编码惯例保持一致。我也不必担心(现在)是否是该领域的入门,但我已经评论了我的代码以指出这一点。 –