Я подключаюсь к базе данных MS-Access 2007, используя VB 2010 и OLEDB. Проведение следующего теста предполагает, что MS-Access неправильно интерпретирует DBNull.Value при отправке в качестве параметра из OLEDB:
(Таблица «Больница» содержит 1 строку со столбцом «LatLong», установленным в ноль)
Dim cnt = Common.GetScalar(axsCon, "SELECT Count(*) FROM Hospitals WHERE LatLong = @LL ", _
New String() {"LL"},
New Object() {DBNull.Value})
Этот запрос возвращает cnt = 0
Тем не менее:
cnt = Common.GetScalar (axsCon, "SELECT Count (*) ИЗ Больниц, ГДЕ LatLong IS 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
ТИА