Я пытаюсь отфильтровать команду OLEDB, поскольку несколько операторов OR OR работают в одном поле базы данных, но последнее в цепочке игнорируется и ничего не возвращает.Последняя инструкция 'OR' Игнорируется в команде OLEDB
У меня есть работа вокруг теперь с запросом @null, который возвращает «DBNull.Value», но если удалить «[доктайп] = @null» снизу игнорирует «[доктайп] = doctype3»
& "WHERE [doctype] = @doctype OR [doctype] = @doctype2 OR [doctype] = @doctype3 OR [doctype] = @null " _
Я могу увеличить или уменьшить «OR Statement», как мне нравится, но это всегда последнее «OR Statement», которое игнорируется.
Я попытался помещать «OR statements» в скобки, но потом ничего не возвращает, или я делаю это неправильно.
Я ищу просто, почему последнее «или утверждение» игнорируется в строке oledbcommand, но если вы можете улучшить код, который я написал, сделайте, но объясните мне, почему и как.
Где они используются (Все остальные значения имеет DBNull.Value для целей тестирования)
f_doctype = "MS"
f_doctype2 = "TMS"
f_doctype3 = "CS"
With cmdaRefresh.Parameters
.AddWithValue("doctype", CType(f_doctype, String))
.AddWithValue("doctype2", CType(f_doctype2, String))
.AddWithValue("doctype3", CType(f_doctype3, String))
.AddWithValue("null", DBNull.Value)
.AddWithValue("docnum", DBNull.Value)
.AddWithValue("docrev", DBNull.Value)
.AddWithValue("matname", DBNull.Value)
.AddWithValue("status", DBNull.Value)
.AddWithValue("actionreq", DBNull.Value)
.AddWithValue("createdby", DBNull.Value)
.AddWithValue("createddate", DBNull.Value)
.AddWithValue("finalby", DBNull.Value)
.AddWithValue("finaldate", DBNull.Value)
End With
Dim cmdRefresh As New OleDbDataAdapter(cmdaRefresh)
'open connection
myconnection.Open()
'read and fill dataset for gridview
cmdRefresh.Fill(dsRefresh, tbl_string.tablename)
'close connection
myconnection.Close()
'fill datagrid with values from database and alter column headers to match criteria
With dg_speclog
.DataSource = dsRefresh.Tables(0)
.RowHeadersVisible = False
.Columns(0).HeaderCell.Value = "Category"
...
End With
Full 'OleDbCommand' создание
Dim cmdaRefresh As OleDbCommand = New OleDbCommand(" SELECT [doctype], [docnum], [docrev], [matname], [status], [actionreq], [createdby], [createddate], [finalby], [finaldate] " _
& "FROM " & tbl_string.tablename & " " _
& "WHERE [doctype] = @doctype OR [doctype] = @doctype2 OR [doctype] = @doctype3 OR [doctype] = @null " _
& "AND [docnum] = @docnum " _
& "AND [docrev] = @docrev " _
& "AND [matname] = @matname " _
& "AND [status] = @status " _
& "AND [actionreq] = @actionreq " _
& "AND [createdby] = @createdby " _
& "AND [createddate] = @createddate " _
& "AND [finalby] = @finalby " _
& "AND [finaldate] = @finaldate " _
& "ORDER BY [docnum] ASC, [docrev] ASC " _
, myconnection)
Похоже, что все эти условия «И» никогда не верны, и из-за приоритета оператора они сочетаются с окончательным условием «ИЛИ». Начните с добавления parens вокруг условий OR. Вам также нужно использовать 'IS NULL' для нулевых проверок, а не' = '. например 'WHERE ([doctype] = @doctype OR [doctype] = @ doctype2 ИЛИ [doctype] = @ doctype3 ИЛИ [doctype] IS NULL) AND [docnum] = @docnum AND ...'. Вам нужно будет выяснить, почему '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' – Mark
Спасибо, я займусь этим, теперь я собираюсь вынуть все дополнительные параметры, чтобы проверить, является ли это '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''. Не могли бы вы прокомментировать, как вы будете делать parens вокруг 'OR', я пробовал, но он ничего не возвращает. – nora