为什么MysqlCommand.ExecuteScalar返回System.NullReferenceException
我正在VB 2013项目中使用MySQL。我正在尝试获取表中正在运行的记录数为什么MysqlCommand.ExecuteScalar返回System.NullReferenceException,mysql,vb.net,Mysql,Vb.net,我正在VB 2013项目中使用MySQL。我正在尝试获取表中正在运行的记录数 Dim SQLstr As String = "SELECT COUNT(*) FROM lieferantenartikel WHERE LiefID=1 AND LfAIDLief=1" Dim CheckExist As New MySqlCommand(SQLstr, New MySqlConnection(strConn)) Try Dim recEx As Integer = CheckExist.
Dim SQLstr As String = "SELECT COUNT(*) FROM lieferantenartikel WHERE LiefID=1 AND LfAIDLief=1"
Dim CheckExist As New MySqlCommand(SQLstr, New MySqlConnection(strConn))
Try
Dim recEx As Integer = CheckExist.ExecuteScalar()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
根据定义,COUNT(*)应返回标量数,即如果不存在任何记录,则返回0,否则返回任何其他正数
但我得到一个System.NullReferenceException。我做错了什么?我也有类似的问题。当一个表没有条目时,就会发生这种情况。您可以使用“ISNULL”进行变通。但也许有更好的办法 我也有类似的问题。当一个表没有条目时,就会发生这种情况。您可以使用“ISNULL”进行变通。但也许有更好的办法 事实上,当我使用打开的连接而不是连接对象时,问题已经解决了!谢谢你,普卢蒂克斯。很明显,我在文档中监督了连接必须是开放的 因此,相应的代码现在是:
Dim SQLstr As String = "SELECT COUNT(*) FROM lieferantenartikel WHERE LiefID=1 AND LfAIDLief=1"
Dim cConn as New MySqlConnection(strConn)
cConn.Open()
Dim CheckExist As New MySqlCommand(SQLstr, cConn)
Try
Dim recEx As Integer = CheckExist.ExecuteScalar()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
非常感谢您的快速帮助!事实上,当我使用打开的连接而不是连接对象时,问题已经解决了!谢谢你,普卢蒂克斯。很明显,我在文档中监督了连接必须是开放的 因此,相应的代码现在是:
Dim SQLstr As String = "SELECT COUNT(*) FROM lieferantenartikel WHERE LiefID=1 AND LfAIDLief=1"
Dim cConn as New MySqlConnection(strConn)
cConn.Open()
Dim CheckExist As New MySqlCommand(SQLstr, cConn)
Try
Dim recEx As Integer = CheckExist.ExecuteScalar()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
非常感谢您的快速帮助!e该错误可能是由于其中一个连接或命令对象为
Nothing
。将连接存储为对象变量,以便可以使用调试器检查所有连接。此外,创建一个连接也不会打开它。Puropolix是正确的。如果这没有帮助,请尝试为我们提供ex.ToString的stacktrace。错误的可能重复可能是由于某个连接或命令对象为Nothing
。将连接存储为对象变量,以便可以使用调试器检查所有连接。此外,创建一个连接也不会打开它。Puropolix是正确的。如果这没有帮助,请尝试为我们提供ex.ToString的stacktrace。错误的可能重复可能是由于某个连接或命令对象为Nothing
。将连接存储为对象变量,以便可以使用调试器检查所有连接。此外,创建一个连接也不会打开它。Puropolix是正确的。如果这没有帮助,请尝试给我们ex.ToString的堆栈跟踪可能重复的DBNull
与Nothing
不同。OP得到的是一个NRE,这意味着正在使用的对象无效,DBNull
意味着数据丢失。抱歉,标准具:当一个表没有条目时,计数为0,这与DBNull不同,这就是为什么使用计数如此吸引人,因为您得到的是您所要求的确切答案,即有多少行。它永远不会返回DBNull。DBNull
与Nothing
不是一回事。OP得到的是一个NRE,这意味着正在使用的对象无效,DBNull
意味着数据丢失。抱歉,标准具:当一个表没有条目时,计数为0,这与DBNull不同,这就是为什么使用计数如此吸引人,因为您得到的是您所要求的确切答案,即有多少行。它永远不会返回DBNull。DBNull
与Nothing
不是一回事。OP得到的是一个NRE,这意味着正在使用的对象无效,DBNull
意味着数据丢失。抱歉,标准具:当一个表没有条目时,计数为0,这与DBNull不同,这就是为什么使用计数如此吸引人,因为您得到的是您所要求的确切答案,即有多少行。它永远不会返回DBNull。