我正在尝试进行验证,如果标签上没有值,应用程序将正常运行。为了更好地解释,我将向您展示我正在使用的代码然后解释它
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.
但这不起作用。你有任何解决方案吗?
答案 0 :(得分:2)
如果字段为NULL,则无法调用GetDecimal,因为GetDecimal方法在内部尝试将空值转换为小数。您可以在MSDN上GetDecimal page的备注部分阅读警告
很容易修复' 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
也许,实际的错误信息会有所帮助