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