Vb.net 验证以获取空值

Vb.net 验证以获取空值,vb.net,Vb.net,我正在尝试进行验证,如果标签上没有值,应用程序将正常运行。为了更好地解释,我将向您展示我正在使用的代码,然后进行解释 Private Sub ShowTotalResult() SQLCon = New SqlConnection SQLCon.ConnectionString = "...." Try SQLCon.Open() Dim Query As String Query = "SELECT

我正在尝试进行验证,如果标签上没有值,应用程序将正常运行。为了更好地解释,我将向您展示我正在使用的代码,然后进行解释

Private Sub ShowTotalResult()
    SQLCon = New SqlConnection
    SQLCon.ConnectionString = "...."
    Try
        SQLCon.Open()
        Dim Query As String
        Query = "SELECT 
                CAST(SUM(CAST(Filesize as float)) / 1024 / 1024 AS DECIMAL(10,2))
                FROM infofile"
        SqlCmd = New SqlCommand(Query, SQLCon)
        SqlDR = SqlCmd.ExecuteReader
        If lblResultadoTotal.Text <> "" Then
            If SqlDR.Read() Then
                lblResultadoTotal.Text = SqlDR.GetDecimal(0)
                Exit Sub
            End If
        End If
        SQLCon.Close()
    Catch ex As SqlException
        MsgBox(ex.Message)
    Finally
        SQLCon.Dispose()
    End Try
End Sub
这是错误
数据为空。无法对空值调用此方法或属性。
但这是行不通的。你有什么解决办法吗

If Not IsDBNull(SqlDR) Then
    lblResultadoTotal.Text = SqlDR.GetValue(0)
End If
也许,实际的错误信息会有所帮助


可能,实际的错误消息会有所帮助

如果字段为空,则无法调用GetDecimal,因为GetDecimal方法在内部尝试将空值转换为十进制。您可以在MSDN上的备注部分阅读警告

这是很容易修复使用


然而,我有点困惑,从所有这些演员在您的查询。我会得到原始值,并尝试转换VB.NET代码中获得的值,这样做会更容易。(需要测试性能)

如果字段为空,则无法调用GetDecimal,因为GetDecimal方法在内部尝试将空值转换为十进制。您可以在MSDN上的备注部分阅读警告

这是很容易修复使用



然而,我有点困惑,从所有这些演员在您的查询。我会得到原始值,并尝试转换VB.NET代码中获得的值,这样做会更容易。(需要测试性能)

它不影响标签之前是否有文字。如果它不起作用,可能是因为
SqlDR.GetDecimal(0)
。尝试存储它返回给变量的内容(
Dim a=SqlDR.GetDecimal(0)
),然后
lblresultadotal.Text=a
查看崩溃的位置。这里崩溃的原因是:lblresultadotal.Text=SqlDR.GetDecimal(0),因为此数据在aimnox处有空值,但基本上可以肯定的是
SqlDR.GetDecimal(0)有问题
而不是标签。它不影响标签之前是否有文本。如果它不起作用,可能是因为
SqlDR.GetDecimal(0)
。尝试存储它返回给变量的内容(
Dim a=SqlDR.GetDecimal(0)
),然后
lblresultadotal.Text=a
查看崩溃的位置。这里崩溃的原因是:lblresultadotal.Text=SqlDR.GetDecimal(0),因为此数据在aimnox处有空值,但基本上可以肯定的是
SqlDR.GetDecimal(0)有问题
而不是标签。我应该把它放在哪里?在什么内部?在使用数据库中的值分配
lblResultadTotal
之前,只需检查一下
DBNull
。你能公布你得到的确切错误吗?史蒂夫的答案可能更好我应该把它放在哪里?在什么内部?在使用数据库中的值分配
lblResultadTotal
之前,只需检查一下
DBNull
。你能公布你得到的确切错误吗?Steve的答案可能更好我正在尝试从数据库中获取相同的值,例如,我得到13.06,我希望它返回13.06而不是13你知道我的意思吗?顺便说一句,代码不起作用。我刚刚用我正在使用的查询编辑了这篇文章。文件大小列的数据类型是什么?代码不起作用是什么意思?顺便说一下,请尽快删除If测试中的Exit子项。这样你就不会关闭连接,更糟的是你不会处理itI忘记删除itI我正在尝试从数据库中获取相同的值,例如,我得到了13.06,我希望它返回13.06而不是13你知道我的意思吗?顺便说一句,代码不起作用。我刚刚用我正在使用的查询编辑了这篇文章。文件大小列的数据类型是什么?代码不起作用是什么意思?顺便说一下,请尽快删除If测试中的Exit子项。这样你就不会关闭连接,更糟的是你不会处理它我忘了删除它
If Not IsDBNull(SqlDR) Then
    lblResultadoTotal.Text = SqlDR.GetValue(0)
End If
' A call to SqlDataReader.Read is always required to position '
' the reader on the first record returned by your query'
if SqlDR.Read() then 
    if SqlDR.IsDbNull(0) Then

        lblResultadoTotal.Text = "0,00"
    else 
        lblResultadoTotal.Text = SqlDR.GetDecimal(0)

    End If
End If