VB 中得为空判断

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB 中得为空判断相关的知识,希望对你有一定的参考价值。

IsNothing()
Is DBNull.Value
IsNullOrEmpty
Sring.Empty
String.IsNullOrWhiteSpace()
以上为空判断都什么情况下用?
有什么区别?
文档或者链接也行。
这个问题应该不深奥吧。。这个问题人气好低。。。。。

IsArray 函数 
返回 Boolean 值,指出变量是否为一个数组。 语法 
IsArray(varname) 
必要的 varname 参数是一个指定变量的标识符。 说明 
如果变量是数组,则 IsArray 返回 True;否则返回 False。对于包含数组的 variant 表达式来说,IsArray 尤为有用。  
IsDate 函数  
返回 Boolean 值,指出一个表达式是否可以转换成日期。 语法 
IsDate(expression) 
必要的 expression 参数是一个 Variant,包含日期表达式或字符串表达式,这里的字符串表达式是可以作为日期或时间来认定的。 说明 
如果表达式是一个日期,或可以作为有效日期识别,则 IsDate 返回 True;否则返回 False。在 Microsoft Windows 中,有效日期的范围介于公元 100 年 1 月 1 日与公元 9999 年 12 月 31 日之间;其有效范围随操作系统不同而不同。  
IsEmpty 函数 
返回 Boolean 值,指出变量是否已经初始化。 语法 
IsEmpty(expression) 
必要的 expression 参数是一个 Variant,包含一个数值或字符串表达式。但是,因为 IsEmpty 被用来确定个别变量是否已初始化,所以 expression 参数通常是单一变量名。 

说明 
如果变量未初始化或已明确设置为 Empty,则 IsEmpty 返回 True;否则返回 False。如果 expression 含有多个变量,则 IsEmpty 总是返回 False。IsEmpty 只返回对 variant 表达式有意义的信息。  
IsNull 函数 
返回 Boolean 值,指出表达式是否不包含任何有效数据 (Null)。 语法 
IsNull(expression) 
必要的 expression 参数是一个 Variant,其中包含数值表达式或字符串表达式。 说明 
如果 expression 为 Null,则 IsNull 返回 True;否则 IsNull 返回 False。如果 expression 由多个变量组成,则表达式的任何作为变量组成成分的 Null 都会使整个表达式返回 True。 
Null 值指出 Variant 不包含有效数据。Null 与 Empty 不同,后者指出变量尚未初始化。Null 与长度为零的字符串 (““) 也不同,长度为零的字符串指的是空串。 
重要 使用 IsNull 函数是为了确定表达式是否包含 Null 值的。在某些情况下,希望表达式取值为 True,比如希望 If Var = Null 和 If Var <> Null 取值为 True,而它们总取值为 False。这是因为任何包含 Null 的表达式本身就是 Null,所以为 False。  
IsNumeric 函数 
返回 Boolean 值,指出表达式的运算结果是否为数。 语法 
IsNumeric(expression) 
必要的 expression 参数是一个 Variant,包含数值表达式或字符串表达式。 说明

如果整个 expression 的运算结果为数字,则 IsNumeric 返回 True;否则返回 False。 
如果 expression 是日期表达式,则 IsNumeric 返回 False。  
IsObject 函数 
返回 Boolean 值,指出标识符是否表示对象变量。 语法 
IsObject(identifier) 
必要的 identifier 参数是一个变量名。 说明 
IsObject 只用于确定 Variant 是否属于 VarType vbObject。如果 Variant 实际引用(或曾经引用过)一个对象,或者如果 Variant 包含 Nothing,则可能出现这种情况。 
如果 identifier 是 Object类型或任何有效的类类型,或者,如果 identifier 是 VarType vbObject 的 Variant 或用户自定义的对象,则 IsObject 返回 True;否则返回 False。即使变量已设置成 Nothing,IsObject 也仍返回 True。 
使用错误捕获方法可以确认对象引用是否有效。 IsMissing 函数 
返回 Boolean 值,指出一个可选的 Variant 参数是否已经传递给过程。 语法 

IsMissing(argname) 
必要的 argname 参数包含一个可选的 Variant 过程参数名。 说明 
使用 IsMissing 函数来检测在调用一个程序时是否提供了可选 Variant 参数。如果对特定参数没有传递值过去,则 IsMissing 返回 True;否则返回 False。如果 IsMissing 对某个参数返回 True,则在其它代码中使用这个丢失的参数将产生一个用户自定义的错误。如果对 ParamArray 参数使用 
IsMissing,则函数总是返回 False。为了检测空的 ParamArray,可试看一下数组的上界是否小于它的下界。 
注意 IsMissing 对简单数据类型(例如 Integer或Double)不起作用,因为与Variants不同,它们没有“丢失”标志位的前提。正由于此,对于可选参数类型,可以指定缺省值。如果调用过程时,参数被忽略,则该参数将具有该缺省值,如下列示例中所示: 
Sub MySub(Optional MyVar As String = "specialvalue")     If MyVar = "specialvalue" Then        ' MyVar 被忽略。     Else     ... End Sub 
在许多情况下,如果用户从函数调用中忽略,则可以通过使缺省值等于希望 MyVar 所包含的值来完全忽略 If MyVar 测试。这将使您的代码更简洁有效。

参考技术A IsNothing 用于判断某个对象是否尚未赋值。例如 Dim 对象 As Object,此时 IsNothing(对象) = True。DBNull 指示 Object 缺少的或不存在的数据。DBNull 与 Nothing 不同,后者指示变量尚未初始化。DBNull 也与零长度字符串不同 (""),零长度字符串有时也称为 null 字符串。String.IsNullOrEmpty 表示这个字符串是否为空(“”)或者干脆没赋值。Empty 是空字符串。IsNullOrWhiteSpace 表示字符串是否未被赋值或者只有空格组成。 参考技术B (1)if cstr(join(一维数组,""))="" then msgbox "数组为空"
(2)public declare function safearraygetdim lib "oleaut32.dll"(byref saarray() as any) as long
然后判断  safearraygetdim (一维数组)>0 ,则是非空,否则为空

参考技术C IsNothing() 对对象控制都可以用这个判断是否为空。

最后2个数字符串是否为空都可以用第一个代替的。

如何检查字节是不是为空 vb.net

【中文标题】如何检查字节是不是为空 vb.net【英文标题】:How to check if byte is null vb.net如何检查字节是否为空 vb.net 【发布时间】:2021-09-27 20:21:14 【问题描述】:

我根据我的 SQL Server 数据库为每个按钮分配背景图像。如果一个字节为空,我会收到此错误:

无法将“System.DBNull”类型的对象转换为“System.Byte[]”类型。

我想允许没有背景图像的按钮,但错误阻止了我。

这是我的尝试:

Dim strsql As String
Dim ImgSql() As Byte

Using con As New SqlConnection("constring")
    con.Open()
    strsql = "SELECT Imagen FROM Inventario WHERE ID=@ID"
    Dim cmd As New SqlCommand(strsql, con)
    ItemID = 1
    cmd.Parameters.Add("@ID", SqlDbType.VarChar).Value = ItemID
    Dim myreader As SqlDataReader

    myreader = cmd.ExecuteReader
    myreader.Read()
    ImgSql = myreader("Imagen")
    If ImgSql IsNot Nothing AndAlso ImgSql.Length > 0 Then

        Dim ms As New MemoryStream(ImgSql)
        btn1.BackgroundImage = Image.FromStream(ms)
        con.Close()
    Else
        'do nothing
    End If
End Using

【问题讨论】:

因为你的字段在 SQL 中为 NULL,所以首先检查 NULL。 ID 列真的是VarChar 而不是Integer @JoelCoehoorn 非常感谢您指出这一点。我有一个坏习惯VarChar 一切。 @djv 我知道它的NULL,关键是让它为NULL并且仍然能够运行程序。 【参考方案1】:
Dim ItemID As Integer = 1
Dim sql As String = "SELECT Imagen FROM Inventario WHERE ID=@ID"
Using con As New SqlConnection("constring"), _
      cmd As New SqlCommand(sql, con)

    cmd.Parameters.Add("@ID", SqlDbType.Integer).Value = ItemID
    con.Open()
    Using myreader As SqlDataReader = cmd.ExecuteReader()
        If myreader.Read() AndAlso Not DBNull.Value.Equals(myreader("Imagen")) Then
            Dim ImgSql() As Byte = DirectCast(myreader("Imagen"), Byte())         
            Using ms As New MemoryStream(ImgSql)
                btn1.BackgroundImage = Image.FromStream(ms)
            End Using
        End If
     End Using
End Using

【讨论】:

【参考方案2】:

在C#中基于这个answer,转换为vb.net并添加了NULL检查

Using con As New SqlConnection("constring")
    Using cmd = con.CreateCommand()
        cmd.CommandText = "SELECT Imagen FROM Inventario WHERE ID=@ID"
        Dim ItemID = 1
        cmd.Parameters.AddWithValue("@ID", ItemID)
        con.Open()
        Dim res = cmd.ExecuteScalar()
        If res IsNot Nothing Then
            ImgSql = CType(res, Byte())
            If ImgSql IsNot Nothing AndAlso ImgSql.Length > 0 Then
                Dim ms As New MemoryStream(ImgSql)
                btn1.BackgroundImage = Image.FromStream(ms)
            End If
        End If
    End Using
End Using

【讨论】:

以上是关于VB 中得为空判断的主要内容,如果未能解决你的问题,请参考以下文章

如何让Access 空文本框参与计算时默认是0,如图碳粉为空,计算时自动变0,别用VB代码,VB我会,请用VBA

如何在 VB.NET 中将可为空的 DateTime 设置为空?

如何检查字节是不是为空 vb.net

vb.net 中的打印预览为空

api判断窗体是不是完成

VB6、MS Access、DAO - 显示列名不为空的所有记录