У меня есть команда SQL, которую меня попросили изменить, и у меня возникают некоторые проблемы с тем фактом, что то, что я передаю SQL, теперь может быть нулевым. Если я передаю значение, я могу положиться на columnName = @parameterName в SQL, но с NULL я не могу передать null или DBNull и правильно его разрешить.
Вот псевдокод SQL:
SELECT
Columns
FROM
ClientSetup
WHERE
Client_Code = @ClientCode AND
Package_Code = @PackageCode AND
Report_Code = @ReportCode
Проблема в том, что теперь @ReportCode может действительно быть NULL. В моем коде C #, где я настроил SqlCommand, я могу вставить:
cmd.Parameters.Add("@ReportCode", SqlDBType.VarChar, 5).Value = reportType;
//reportType is a string, which can be null
Но, если reportType имеет значение null, мне нужно использовать 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;
То, что это делает, работает, но мне было интересно, знает ли кто-нибудь более чистый или лучший способ обработки обнуляемых параметров при передаче вещей в SQL из кода .NET.