我正在重写这个长 INSERT 语句和参数,如下所示:
cmd.Parameters.AddWithValue("@Website", General.fnSQLNullValues(tWebsite.Text))
General.fnSQLNullValues 是这样的:
Public Shared Function fnSQLNullValues(ByVal sValue As Object, Optional ByVal Len As Integer = 999999) As Object
If sValue Is Nothing Then Return DBNull.Value
fnSQLNullValues = IIf(sValue.ToString.Length = 0, DBNull.Value, Left(sValue.ToString(), Len))
End Function
我根本不喜欢这个,而且似乎有很多代码都是为了做到这一点,
cmd.Parameters.AddWithValue("@Website" , If(tWebsite.Text , DBNull.Value))
根据我的理解,如果 tWebsite.Text 为 null 或不被接受,那么 DBNull.Value 中的一行代码将替换 tWebsite.Text 作为值,并且在我看来,它通常与其他函数执行相同的操作。这是正确的吗?其中一种方法比另一种更好吗?
另外,我从第二种方式中收到警告:“无法推断通用类型;假设对象”,但在我看来,第一种方式无论如何都使用通用对象,所以我不知道是否应该忽略它警告
最佳答案
在代码中使用数据库参数时,字符串有点棘手。如果有空字符串,它将传递一个空字符串值进行插入。但是,如果您将字符串设置为 Nothing 值,则会将 NULL 值插入数据库中。否则它将设置一个空字符串。
理想情况下,您的数据层之上应该有某种业务层,它将检查您的 tWebsite.Text 值,并将 Nothing 或 Text 值传递给设置参数的函数。这与上面的第一个代码示例略有不同。这样你的数据层只需要执行以下命令:
cmd.Parameters.AddWithValue("@Website" , valueWebsite))
...没有必要麻烦。
对于其他数据类型(例如整数、小数等),请查看Nullable Types并与他们一起工作。它们使事情变得非常容易使用。默认情况下,它们初始化为 Nothing,因此,如果您没有为其分配值(从输入框中),则该值将保持 Nothing 状态,并将在数据库中执行正确的 NULL 插入。
关于asp.net - VB.Net IIf函数中添加SqlParameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11370417/