Проблема здесь в том, что функция CTOD()
не поддерживается OLE DB Provider.
Изменить запрос использовать DTOS()
, которые:
Возвращает дату символов строки в формате ГГГГММДД из указанного Даты или выражения DateTime.
Так заключая запрос может стать для:
string SQL = String.Format(
@"SELECT
codalb
FROM
balbara
WHERE
DTOS(fecalb) BETWEEN '{0}' AND '{1}'
AND codcli LIKE '%9'
ORDER BY
codalb",
dateTimeVariable1.ToString("yyyyMMdd"),
dateTimeVariable2.ToString("yyyyMMdd"));
Примечания 1: ЗАКАНЧИВАТЬ отступы, чтобы помочь вам писать читаемый код, и я предлагаю, чтобы написать все колонки/имена таблицы в нижнем регистре, так вы можете легко изменить, каковы ваши «данные» и что такое SQL.
Примечание 2: вы можете найти OFFICAL примеры форматных строк о DateTime
типа here.
EDIT: Как
хороших советов в комментариях от @AlanB, вы должны всегда стремиться использовать
parametrized queries вместо строки для предотвращения
SQL Injection атак.
Замечание о параметрах OLEDB:
В .NET Поставщик OLE DB не поддерживает именованные параметры для передачи параметров оператора SQL или хранимой процедуры, называемой помощью OleDbCommand когда CommandType установлен в Текст. В этом случае необходимо использовать знаковый знак вопроса (?) .
И о порядке параметров:
Таким образом, порядок, в котором объекты OleDbParameter добавляют к OleDbParameterCollection должны непосредственно соответствовать положению знак вопроса заполнитель для параметра в тексте команды.
Таким образом, все эти сведения, приведенные запрос может выглядеть этот пример:
OleDbCommand Query = new OleDbCommand();
Query.Connection = ConnectionHandler;
Query.CommandText =
@"SELECT
codalb
FROM
balbara
WHERE
DTOS(fecalb) BETWEEN ? AND ?
AND codcli LIKE '%9'
ORDER BY
codalb";
Query.Parameters.Add(dateTimeVariable1.ToString("yyyyMMdd"));
Query.Parameters.Add(dateTimeVariable2.ToString("yyyyMMdd"));
OleDbDataReader datareader = Query.ExecuteReader();
Это SQL строка обыкновения компиляции из-за неэкранированную цитату ... –
Вы должны, вероятно, использовать даты в формате '...ГДЕ FECALB МЕЖДУ {^ 2015/12/07} И ... ' –
@Alex K. K Положите, как вы предлагаете, но не сработаете – Ion