【问题标题】:VB.Net IIf function in adding SqlParameterVB.Net IIf函数中添加SqlParameter
【发布时间】:2012-07-06 22:22:35
【问题描述】:

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

另外,我从第二种方式收到警告:“无法推断通用类型;假定对象”,但在我看来,第一种方式无论如何都是使用通用对象,所以我不知道我是否应该忽略这个警告

【问题讨论】:

  • 请更新标题/问题/标签,因为 这确实与 ADO/SQL 无关 并且与 IffIf(合并)有关。 (但是,应该很有可能使用null 而不是DBNull.Value,在涉及引用或Nullable 类型的情况下,可以将其“静默强制转换”为类型。)

标签: asp.net vb.net sqlparameter


【解决方案1】:

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

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

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

...没有任何麻烦。

对于其他数据类型(例如整数、小数等),请查看Nullable Types 并使用它们。它们使事情变得非常容易使用。默认情况下,它们初始化为 Nothing,因此如果您不为它分配一个值(从您的输入框中),该值将保持为 Nothing,并将正确地将 NULL 插入到数据库中。

【讨论】:

  • say @Website is expecting a float ,我可以做 Dim website As Nullable(of float) - 然后把网站放在那里?
  • 你可以,但我认为当你尝试将 google.com 放入 Float 时它会爆炸?哈哈
  • @ScottSelby 正确。一般来说,我的逻辑是:Dim website As Nullable(Of Float)? If Not String.IsNullOrEmpty(tWebsite.Text) website = Float.Parse(tWebSite.Text) EndIF
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多