Проект на C++, используется SQLNCLI11 в качестве провайдера и класс CCommand.
Когда при первом insert вызываешь метод CCommand.Prepare()
ругается на "Insert value list does not match column list"
хотя запрос вроде выглядит честно.
Я выяснил, что если поубирать CONVERT(date,?, 104), то все работает.
INSERT INTO DMS.DBO.PROJEKTE ([PROJEKT],[BESCHRIFTUNG],[MANDANT],[DATUM_VON],[DATUM_BIS],[PRODUKT_ID],[KUNDE_ID],[MEDIENGATTUNG_ID],[TIMESTAMP]) VALUES (?,?,?,CONVERT(date,?, 104),CONVERT(date,?, 104),?,?,?,?)
Кто нибудь сталкивался с такой ситуацией? И как ее можно обойти?
Здравствуйте, collider, Вы писали:
C>Кто нибудь сталкивался с такой ситуацией? И как ее можно обойти?
Похоже на баг драйвера. Попробуй в порядке бреда поставить вставку convert в самый конец или в самое начало списка.
Здравствуйте, _ABC_, Вы писали:
_AB>Здравствуйте, collider, Вы писали:
C>>Кто нибудь сталкивался с такой ситуацией? И как ее можно обойти? _AB>Похоже на баг драйвера. Попробуй в порядке бреда поставить вставку convert в самый конец или в самое начало списка.
Ничего не дает. Такая же фигня. Самое прикольное, что после этого, если забить на ошибку, вставка идет нормально а update и с Prepare и так работает нормально.
Я решил не связываться с такой фигней и не терять времени и тупо руками без CONVERT пишу дату в формате ISO yyyymmdd.
Здравствуйте, collider, Вы писали:
_AB>>Похоже на баг драйвера. Попробуй в порядке бреда поставить вставку convert в самый конец или в самое начало списка. C>Ничего не дает. Такая же фигня.
Ну, собственно, поэтому и в порядке бреда предложение было...
C>Самое прикольное, что после этого, если забить на ошибку, вставка идет нормально а update и с Prepare и так работает нормально.
Угу. Почти 100% баг драйвера. Я просто поэксперементировал внутри SQL Server — там всё нормально, sp_prepare отрабатывает хорошо такие ситуации, да и сообщение об ошибке драйверское, а не SQL Server'а.
C>Я решил не связываться с такой фигней и не терять времени и тупо руками без CONVERT пишу дату в формате ISO yyyymmdd.
Вполне рабоичй вариант, почему нет.
Как другой вариант — а prepare тебе вообще нужен на самом деле?
Здравствуйте, _ABC_, Вы писали:
_AB>Здравствуйте, collider, Вы писали:
_AB>>>Похоже на баг драйвера. Попробуй в порядке бреда поставить вставку convert в самый конец или в самое начало списка. C>>Ничего не дает. Такая же фигня. _AB>Ну, собственно, поэтому и в порядке бреда предложение было...
C>>Самое прикольное, что после этого, если забить на ошибку, вставка идет нормально а update и с Prepare и так работает нормально. _AB>Угу. Почти 100% баг драйвера. Я просто поэксперементировал внутри SQL Server — там всё нормально, sp_prepare отрабатывает хорошо такие ситуации, да и сообщение об ошибке драйверское, а не SQL Server'а.
C>>Я решил не связываться с такой фигней и не терять времени и тупо руками без CONVERT пишу дату в формате ISO yyyymmdd. _AB>Вполне рабоичй вариант, почему нет. _AB>Как другой вариант — а prepare тебе вообще нужен на самом деле?
Ну как нужен... Как это бывает- тебе говорят- бери, вот этот уже проверенный рабочий код, который используется в туеву кучу мест и все работает.
А потом хрясь, и он не работает для твоей конструкции...
А менять эту хрень в общем классе уже как то и стремновато. Вот и приходится думать,прям как врач- "не навреди" )
Здравствуйте, collider, Вы писали:
C>Проект на C++, используется SQLNCLI11 в качестве провайдера и класс CCommand. C>Когда при первом insert вызываешь метод CCommand.Prepare() C>ругается на "Insert value list does not match column list" C>хотя запрос вроде выглядит честно. C>Я выяснил, что если поубирать CONVERT(date,?, 104), то все работает. C>INSERT INTO DMS.DBO.PROJEKTE ([PROJEKT],[BESCHRIFTUNG],[MANDANT],[DATUM_VON],[DATUM_BIS],[PRODUKT_ID],[KUNDE_ID],[MEDIENGATTUNG_ID],[TIMESTAMP]) VALUES (?,?,?,CONVERT(date,?, 104),CONVERT(date,?, 104),?,?,?,?)
C>Кто нибудь сталкивался с такой ситуацией? И как ее можно обойти?
Никогда не сталкивался, а видел много разного.
Попробуй так:
Здравствуйте, collider, Вы писали:
C>Проект на C++, используется SQLNCLI11 в качестве провайдера и класс CCommand. C>Когда при первом insert вызываешь метод CCommand.Prepare() C>ругается на "Insert value list does not match column list"
Очень похоже что это ошибка не сервера а клиента. проверь кол-во вопросиков в тексте команды и кол-во параметров на клиенте. одинаковое?