Команда OleDB Select не работает с несколькими операторами OR (C #) - PullRequest
0 голосов
/ 16 мая 2019

Я использую приведенный ниже оператор выбора, чтобы взять данные из Excel и поместить их в таблицу данных.Там есть плохая строка, которую я не хочу поднимать, поэтому эта часть [Plan] <> 'PLAN_BO', однако, не работает с двумя другими операторами OR.[План] должен быть столбцом даты и времени, но есть дополнительная строка с текстом.

Комбинация [План] <> 'PLAN_BO' или [План] - пустая работа вместе, но не три вместе.

 comm.CommandText = "Select Category, [Project ID], Package, [Design ID], LLW, Bldg, School, [Project Description], [Doc Avail], [Plan] from [ca_rpt$] where [Plan] <> 'PLAN_BO' or [Plan] is null or [Plan] >= DATE() order by Category, [Project ID], Package, [Design ID], LLW";

Есть ли способ сместить первую строку, потому что это плохая строка, но это не заголовки столбцов.Я попытался сместить 1 строку в конце утверждения, но это не сработало.

Редактировать: Текущее состояние

(ISDATE ([План вскрытия конвертов]) и [План вскрытия конвертов]> = DATE ()) или [План вскрытия конвертов] равен нулю

[Bid Open Plan]> = DATE () игнорируется.

 using (OleDbConnection conn = new OleDbConnection())
            {
                System.Data.DataTable dt = new System.Data.DataTable();
                conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";" + "Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1'";
                using (OleDbCommand comm = new OleDbCommand())
                {
                    comm.CommandText = "Select Category, [Project ID], Package, [Design ID], LLW, Bldg, School, [Project Description], [Pkg#], [Doc Available], [Bid Open Plan] from(Select Category, [Project ID], Package, [Design ID], LLW, Bldg, School, [Project Description], [Pkg#], [Doc Available], [Bid Open Plan] from [ca_rpt$] where ISDATE([Bid Open Plan]) or [Bid Open Plan] is null) Where [Bid Open Plan] >= DATE() order by Mincat, Minse, [Pkg#], [Project ID], Package, [Design ID], LLW";
                    comm.Connection = conn;
                    using (OleDbDataAdapter da = new OleDbDataAdapter())
                    {
                        da.SelectCommand = comm;
                        da.Fill(dt);

1 Ответ

1 голос
/ 16 мая 2019

Возможно, вам нужно проверить, является ли значение столбца действительной датой. Вы можете использовать ISDATE, чтобы проверить, является ли значение допустимой датой, и вернуть только те из них, которые являются действительными.

  Select Category, [Project ID], Package, [Design ID], LLW, Bldg, School, 
    [Project Description], [Doc Avail], [Bid Open Plan] 

    FROM(
          Select Category, [Project ID], Package, [Design ID], LLW, Bldg, School, [Project Description], [Doc Avail], [Bid Open Plan]
          from [ca_rpt$]
          where ISDATE([Bid Open Plan]) =1 or [Bid Open Plan] is null 
    )
    WHERE [Bid Open Plan]>=Date()
    order by Category, [Project ID], Package, [Design ID], LLW

проверьте эту ссылку Документация по ISDATE ()

...