Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Через ADODB.Command пытаюсь выполнить запрос UNION +? + 2*FROM, но получаю ошибку  [new]
tormozit
Member

Откуда:
Сообщений: 19
select 1 f
FROM (select 1 f) t
union
SELECT 1 f
FROM (select 1 f) t
WHERE ? <= 2

Сразу после установки этого текста в объект Command обращаюсь к его свойству Parameters.Count и получаю исключение (-2147467259 неверный синтаксис около конструкции ".2")

Если же я делаю тоже самое с запросом
SELECT 1 f
FROM (select 1 f) t
WHERE ? <= 2

или
select 1 f
union
SELECT 1 f
FROM (select 1 f) t
WHERE ? <= 2

или
select 1 f
union
SELECT 1 f
FROM (select 1 f) t
WHERE 1 <= 2

то исключения не возникает.

Акцентирую еще раз, что речь идет даже не о выполнении запроса, а о конкретно вычислении свойства Parameters.Count сразу после установки текста запроса. Т.е. код примерно такой

ОбъектЗапрос = Новый COMОбъект("ADODB.Command");
ОбъектЗапрос.ActiveConnection = СоединениеADO;
ОбъектЗапрос.CommandText = Текст;
Пустышка = ОбъектЗапрос.Parameters.Count;

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

Драйверы пробовал 2
1. Provider=SQLOLEDB;
2. Provider=SQLNCLI10;

Поведение одинаковое и описание ошибки тоже.
23 окт 14, 00:01    [16746228]     Ответить | Цитировать Сообщить модератору
 Re: Через ADODB.Command пытаюсь выполнить запрос UNION +? + 2*FROM, но получаю ошибку  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
tormozit,

Если мы ведем речь о параметрах, то найдите отличия:

WHERE ? <= 2

и
WHERE CustomerID = ?
23 окт 14, 00:11    [16746252]     Ответить | Цитировать Сообщить модератору
 Re: Через ADODB.Command пытаюсь выполнить запрос UNION +? + 2*FROM, но получаю ошибку  [new]
tormozit
Member

Откуда:
Сообщений: 19
Не понимаю. Может конкретнее написать?
23 окт 14, 00:13    [16746258]     Ответить | Цитировать Сообщить модератору
 Re: Через ADODB.Command пытаюсь выполнить запрос UNION +? + 2*FROM, но получаю ошибку  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
tormozit
Не понимаю. Может конкретнее написать?


Вот и провайдер Вас не понимает. На ровном месте нарисовавшийся ? он к чему относится? Как должен быть типизирован? Почему Вы решили, что ? можно воткнуть в любое место параметризированного запроса?
23 окт 14, 00:18    [16746268]     Ответить | Цитировать Сообщить модератору
 Re: Через ADODB.Command пытаюсь выполнить запрос UNION +? + 2*FROM, но получаю ошибку  [new]
tormozit
Member

Откуда:
Сообщений: 19
Что значит "к чему относится параметр"?
Типизация параметра у меня дальше в коде задается путем добавления описания параметра в коллекцию Parameters.
Я решил, что "?" можно воткнуть в любое место, основываясь на имеющемся опыте программирования на другом диалекте sql. И главное, я привел примеры, когда такое втыкание в любое место успешно работает.
23 окт 14, 00:27    [16746283]     Ответить | Цитировать Сообщить модератору
 Re: Через ADODB.Command пытаюсь выполнить запрос UNION +? + 2*FROM, но получаю ошибку  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
tormozit,

автор
Что значит "к чему относится параметр"? Типизация параметра у меня дальше в коде задается


А что происходит при вызове Parameters.Count у Вас где задается?

автор
Я решил, что "?" можно воткнуть в любое место, основываясь на имеющемся опыте программирования на другом диалекте sql.


М.б. здесь кроется причина несбывшихся ожиданий? Правда, ADO, как бы изначально дистанцированно от того или иного диалекта SQL.

автор
И главное, я привел примеры, когда такое втыкание в любое место успешно работает.


И какого типа получился параметр?
23 окт 14, 00:41    [16746303]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить