Я пишу приложение vb.net, которое ищет базу данных Access 2010 и столкнулось с проблемой, которую я не могу решить. Следующий сегмент кода - проблема.SQL BETWEEN Запрос, возвращающий неверные результаты
Using SQLcon 'public property containing OleDbConnection
Dim ds As New DataSet
Dim da As New OleDbDataAdapter
Dim cmd As New OleDbCommand
cmd.Connection = SQLcon
cmd.CommandType = CommandType.Text
Dim heightMin As Double = OverallHeight - 0.25
Dim heightMax As Double = OverallHeight + 0.125
cmd.CommandText = "SELECT * FROM [CAGE - BARREL] WHERE [Type][email protected] AND [Valve Size][email protected] AND [Cage Height] BETWEEN @p3 AND @p4"
cmd.Parameters.AddWithValue("@p1", CageType) '[Type]
cmd.Parameters.AddWithValue("@p2", ValveSize) '[Valve Size]
cmd.Parameters.AddWithValue("@p3", heightMin) '[Cage Height]
cmd.Parameters.AddWithValue("@p4", heightMax) '[Cage Height]
da = New OleDbDataAdapter(cmd)
SQLcon.Open()
da.Fill(ds, "[CAGE - BARREL]")
SQLcon.Close()
End Using
Когда я запускаю инструкцию SQL непосредственно в Access с определенным набором значений, я получаю 3 результата, как ожидалось. Когда я запускаю его через свою программу, я получаю 6, где 3 значения находятся за пределами моих границ для оператора BETWEEN. Я дважды проверял типы данных для поля в Access и переменные в vb.net. Я знаю, что чего-то не хватает. У кого-нибудь есть идеи, в которых я ошибаюсь?
ОБНОВЛЕНИЕ:
Значения в использовании заключаются в следующем.
@p1="INLET"
@p2="10.50" 'this is a text field
@p3=heightMin=6 'this is a number/double
@p4=heightMax=6.375 'this is a number/double
Значение, возвращаемое программа .net включает 5,5 и 3,688, которые находятся за пределами границ выше и 6, 6 и 6,188, которые являются правильными.
Можете ли вы изменить свой вопрос, чтобы предоставить примеры значений, которые иллюстрируют проблему? Например, «Когда я указываю« ОбщийHeight »как ___, я получаю строки, содержащие значения [Cage Height] ___, которые находятся за пределами диапазона' heightMin' до 'heightMax'. –
Работает ли это, если вместо использования' .AddWithValue' вы используете , например, 'cmd.Parameters.Add (новый OleDbParameter с {.ParameterName =" @ p3 ", .OleDbType = OleDbType.Double, .Value = heightMin})'? (И аналогично для других параметров.) –
[Cage - Barrel] - это таблица – Mike