我的页面上有一些文本框可以为空,因为它们是可选的,并且我有这个 DAL 代码
parameters.Add(new SqlParameter("@FirstName", FirstName));
parameters.Add(new SqlParameter("@LastName", LastName));
parameters.Add(new SqlParameter("@DisplayName", DisplayName));
parameters.Add(new SqlParameter("@BirthDate", BirthDate));
parameters.Add(new SqlParameter("@Gender", Gender));
这些字段中的任何一个都可以为空。问题是当他们是空的我收到Procedure XXX requires @FirstName which was not supplied
然后我将代码更改为
parameters.Add(new SqlParameter("@FirstName", String.IsNullOrEmpty(FirstName) ? DBNull.Value : (object)FirstName));
parameters.Add(new SqlParameter("@LastName", String.IsNullOrEmpty(LastName) ? DBNull.Value : (object) LastName));
parameters.Add(new SqlParameter("@DisplayName", String.IsNullOrEmpty(DisplayName) ? DBNull.Value : (object) DisplayName));
parameters.Add(new SqlParameter("@BirthDate", BirthDate.HasValue ? (object)BirthDate.Value : DBNull.Value));
parameters.Add(new SqlParameter("@Gender", String.IsNullOrEmpty(Gender) ? DBNull.Value : (object) Gender));
但这对我来说看起来很乱,尤其是转换为,object
因为三元语句要求两个值都是相同的类型。
为什么在数据库中不处理空字符串或空字符串NULL
?如果我必须将其转换为DBNull.Value
是否有更清洁的方法?将值保存为数据库中的空字符串可能会有所帮助,但NULL
数据库中的查询也会变得混乱
请就常见做法或类似做法提出建议。