ADO.net между странным поведением - PullRequest
3 голосов
/ 15 июля 2011

Я не уверен, что не так с этим кодом ...

else if (combo_View.Text == "Orders")
{

    da.SelectCommand = new OleDbCommand("SELECT * FROM TestQuery WHERE (VendorName = @VendorName OR @VendorName = '') AND (CustomerName = @CustomerName OR @CustomerName = '') AND (PO = @PO OR @PO = '')  AND (ItemNum = @ItemNum OR @ItemNum = '') AND (orderDate BETWEEN @From AND @To) ORDER BY CustomerName", cs);

    //da.SelectCommand = new OleDbCommand("SELECT * FROM TestQuery WHERE orderDate BETWEEN @From AND @To", cs);

    da.SelectCommand.Parameters.Add("@VendorName", OleDbType.VarChar).Value = combo_VendorView.Text.ToString();
    da.SelectCommand.Parameters.Add("@CustomerName", OleDbType.VarChar).Value = combo_CustomerView.Text.ToString();

    da.SelectCommand.Parameters.Add("@From", OleDbType.Date).Value = "#" + tp_viewFrom.Value.Date.ToString("M/d/yyyy") + "#";
    da.SelectCommand.Parameters.Add("@To", OleDbType.Date).Value = "#" + tp_viewTo.Value.Date.ToString("M/d/yyyy") + "#";

    da.SelectCommand.Parameters.Add("@PO", OleDbType.VarChar).Value = txt_POLookup.Text.ToString();
    da.SelectCommand.Parameters.Add("@ItemNum", OleDbType.VarChar).Value = combo_ItemNumLookup.Text.ToString();


    dsB.Clear();
    da.Fill(dsB);
    dgv_DataLookup.DataSource = dsB.Tables[0];
}

В основном я хочу заполнить сетку данных оператором Между. Для нескомментированной команды SelectCommand я, кажется, не получаю значений в моей сетке данных при выборе допустимых дат. Однако, когда я вынимаю комментарии команды select после этого, она работает, когда это единственная дата. Может кто-нибудь сказать мне, что не так с первой командой, когда у меня есть другие параметры с ней? Спасибо

Edit:

Больше странности, когда я использую эту команду выбора:

da.SelectCommand = new OleDbCommand("SELECT * FROM TestQuery WHERE
    (VendorName = @VendorName OR @VendorName = '')
    AND (CustomerName = @CustomerName OR @CustomerName = '')
    AND orderDate BETWEEN @From AND @To ORDER BY CustomerName", cs);

это работает, но я добавляю к нему что-нибудь еще, и оно останавливается ...

Ответы [ 3 ]

0 голосов
/ 15 июля 2011

Это почти наверняка вызвано тем, что значения, передаваемые в другие параметры, приводят к тому, что одно или несколько других ваших предложений оцениваются как ложные.Проверьте, что вводится в параметры без даты в отладчике, и / или профилируйте базу данных, чтобы извлечь значения.

0 голосов
/ 15 июля 2011

Если какое-либо из ваших значений данных или сами параметры в предложении между ними равны нулю, то интервал всегда будет ложным.Проверьте наличие нулевых значений в @from и @to и поместите их в или с этим тестом.

and (@from is null or @to is null or <between stmt> )
0 голосов
/ 15 июля 2011

Я не думаю, что это проблема выбора даты, которая является проблемой. Я думаю, что это некоторые из утверждений, подобных этому:

VendorName = @VendorName OR @VendorName = ''

Вы действительно имеете в виду @VendorName = '' или вы хотели написать VendorName = ''?

Мое подозрение заключается в том, что, поскольку вы И делаете все пункты вместе в своем WHERE, вы не получаете никаких данных обратно, потому что нет данных, отвечающих всем критериям.

EDIT Исходя из ваших дальнейших правок, создается впечатление, что, как только вы добавляете больше данных, которые исключаете / фильтруете, вы не получаете результатов, поэтому я снова хотел бы предположить, что результатов нет, потому что данные не соответствуют этим ужесточенным критериям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...