VB.Net IIf函数在添加SqlParameter时

时间:2012-07-06 22:22:35

标签: asp.net vb.net sqlparameters

我正在重写这个长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作为值,在我看来,它与General中的其他函数做同样的事情。这是正确的,是一种比另一种更好的方式吗?

此外,我从第二种方式得到警告:“不能推断常见类型;对象假设”,但在我看来,第一种方式是使用通用对象,所以我不知道我是否应该忽略这个警告

1 个答案:

答案 0 :(得分:5)

在代码中使用数据库参数时,字符串有点棘手。如果您有一个空字符串,它将传递一个空字符串值以便插入。但是,如果设置将字符串设置为Nothing值,则会将NULL值插入数据库。否则它将设置一个空字符串。

理想情况下,您的数据层顶部会有某种业务层,它会检查您的tWebsite.Text值,并将Nothing或Text值传递给设置参数的函数。这与您上面的第一个代码示例略有不同。这样,您的数据层只需执行以下命令:

cmd.Parameters.AddWithValue("@Website" , valueWebsite))

......没有必要麻烦。

对于其他数据类型(例如整数,小数等),请查看Nullable Types并使用它们。它们使事情变得非常容易。默认情况下,它们初始化为Nothing,因此如果您没有为它赋值(从输入框中),则值保持为Nothing,并且将在数据库中执行正确的NULL插入。