Option Strict和Null

时间:2017-09-25 20:51:30

标签: vb.net

我不想在数据库中使用空字符串。当一个字段为null时,我希望它为null。 我想替换

If strStreet = "" Then
            cmd.Parameters("@Street").Value = DBNull.Value
        Else
            cmd.Parameters("@Street").Value = strStreet
        End If

使用VB If Operator如下

 cmd.Parameters("@Street").Value = If(strStreet = "", DBNull.Value, strStreet)

我从第一个=符号右边的所有内容中得到以下消息。 “无法推断出常见的类型,Option Strict On不允许假定'对象'。” 好的,所以我做了一点演员

cmd.Parameters("@Street").Value = If(strStreet = "", CObj(DBNull.Value), strStreet)

红色的波浪形状消失了,在CObj下出现了一个绿色的波浪形,说多余的Cast。 我是不是该 A.关闭Option Strict B.忽略绿色波浪形 C.回到我的If ... Else ...结束如果 或者是其他东西?? 顺便说一句,当我为某些控件的Text属性准备字符串时,它在另一个方向上工作得很好。

strStreet = If(reader.GetValue(2) IsNot DBNull.Value, reader.GetString(2), "")

我已经阅读了几个问题和答案,这些问题正在解决我的问题,但我无法理解。 感谢您的关注。

2 个答案:

答案 0 :(得分:0)

Null上的{p> vb.netNothing ..因此,您可以使用以下代码:

这在MYSQL数据库上运行良好:

cmd.Parameters.Add("@Street", MySqlDbType.String).Value = If(strStreet = "" OrElse strStreet = Nothing, Nothing, strStreet)

您还可以使用:

       cmd.Parameters.Add("@Street", MySqlDbType.String).Value = If(String.IsNullOrEmpty(strStreet), CObj(System.DBNull.Value), strStreet)

注意:
database中,您必须检查该字段是否包含Null。如果没有,它可能会失败。

  

将使用Option Script On

运行

答案 1 :(得分:0)

不确定触发冗余强制转换警告到底是什么,但是使用以下扩展方法时,如果有许多参数,则不应该收到警告并且代码也会少。

mvn test

然后您可以像这样设置参数值:

Imports System.Runtime.CompilerServices

Module Extensions

    <Extension>
    Public Function GetDBNullIfEmpty(s As String) As Object
        If String.IsNullOrEmpty(s) Then
            Return DBNull.Value
        Else
            Return s
        End If
    End Function

End Module