验证以获取空值

时间:2016-05-25 08:57:26

标签: vb.net

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

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

这段代码的作用是给出我在数据库中得到的总数(以MB为单位)。为了进行一些测试,我删除了数据库中的所有信息,当我尝试运行应用程序时,它会在此行lblResultadoTotal.Text = SqlDR.GetDecimal(0)上给出错误,因为该标签上没有值。那么我要做什么呢?

我尝试使用If lblResultadoTotal.Text <> "" Then lblResultadoTotal.Text = SqlDR.GetValue(0) End If

这是我用来从数据库中获取值的查询

SELECT 
CAST(SUM(CAST(Filesize as float)) / 1024 / 1024 AS DECIMAL(10,2))
FROM infofile

这是错误Data is Null. This method or property cannot be called on Null values. 但这不起作用。你有任何解决方案吗?

2 个答案:

答案 0 :(得分:2)

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

使用SqlDataReader.IsDbNull

很容易修复
' 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

但是,我对你查询中的所有演员都感到有点困惑。我会得到原始值并尝试转换在VB.NET代码中获得的值,这将更容易做到。 (需要测试表演)

答案 1 :(得分:0)

If Not IsDBNull(SqlDR) Then
    lblResultadoTotal.Text = SqlDR.GetValue(0)
End If

也许,实际的错误信息会有所帮助