asp.net - VB.Net IIf函数中添加SqlParameter

标签 asp.net vb.net sqlparameter

我正在重写这个长 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/

相关文章:

c# - 从 Controller 传递 Html 字符串以查看 ASP.Net MVC

sql-server - 打开从 sql server 下载的 Office 文件时出错

sql-server - 将标识列复制到另一个表中

.net - 在 vb.net 中读取非常大的文本文件时出现内存不足错误

c# - 将空的 DateTime 值发送到 SQL 存储过程。但不为空

c# - SqlParameter 构造函数与对象初始值设定项的问题

c# - X-Frame-Options:ALLOW-FROM HTTP 和 HTTPS

javascript - angular - 如何在ng-click上从服务器下载文件?

javascript - 从 anchor 标记在新选项卡中打开 .docx 文件

unit-testing - 如何测试 SqlParameter 是否相等