Vb.net MS Access查询无法使用OLEDB.NET正确解释DBNull.Value
我正在使用VB 2010和OLEDB连接到MS Access 2007数据库。执行以下测试似乎表明MS Access在作为参数从OLEDB发送时无法正确解释DBNull.Value: (医院表包含1行,其中“LatLong”列设置为null) 此查询返回cnt=0 然而: cnt=Common.GetScalar(axsCon,“从LatLong为NULL的医院中选择计数(*)) 返回cnt=1 欢迎提出任何意见 p、 s: Common.GetScalar看起来像:Vb.net MS Access查询无法使用OLEDB.NET正确解释DBNull.Value,vb.net,ms-access,Vb.net,Ms Access,我正在使用VB 2010和OLEDB连接到MS Access 2007数据库。执行以下测试似乎表明MS Access在作为参数从OLEDB发送时无法正确解释DBNull.Value: (医院表包含1行,其中“LatLong”列设置为null) 此查询返回cnt=0 然而: cnt=Common.GetScalar(axsCon,“从LatLong为NULL的医院中选择计数(*)) 返回cnt=1 欢迎提出任何意见 p、 s: Common.GetScalar看起来像: Public Shared
Public Shared Function GetScalar( _
ByRef OleCon As OleDbConnection, _
ByRef SQL As String, _
Optional ByRef Params() As String = Nothing, _
Optional ByRef Vals() As Object = Nothing, _
Optional IsQuery As Boolean = False) As Object
Try
Dim oleCmd As OleDbCommand = OleCon.CreateCommand
oleCmd.CommandType = IIf(IsQuery, CommandType.StoredProcedure, CommandType.Text)
oleCmd.CommandText = SQL
If Not Params Is Nothing Then
Dim pInx As Int16
For pInx = 0 To Params.Count - 1
oleCmd.Parameters.AddWithValue(Params(pInx), Vals(pInx))
Next
End If
Return oleCmd.ExecuteScalar()
Catch ex As Exception
Throw New Exception(ex.Message)
End Try
End Function
TIA您的GetScalar将运行查询:
从LatLong=NULL的医院选择计数(*)
但是你想要
从LatLong为空的医院选择计数(*)
如果要比较空值,则需要将的=
切换为IS
。更改
"SELECT Count(*) FROM Hospitals WHERE LatLong = @LL"
到
“选择计数(*)
来自医院
其中1=
案例
当@LL为null且LatLong为null时,则为1
当LatLong=@LL时,则为1
结束“
然后将检查空值或匹配值。空值可能非常棘手。OP试图用参数来实现这一点。在我看来,它不是这样的。他们将Null作为参数插入,但=
是硬编码到文本SQL字符串中的。
"SELECT Count(*) FROM Hospitals WHERE LatLong = @LL"