Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net MS Access查询无法使用OLEDB.NET正确解释DBNull.Value_Vb.net_Ms Access - Fatal编程技术网

Vb.net MS Access查询无法使用OLEDB.NET正确解释DBNull.Value

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

我正在使用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 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"