2006-09-03

metaclass: (Default)
2006-09-03 11:58 am

Дырявые абстракции

Так вот, к вопросу об отладке MS Jet базы данных, заведенной через OleDbConnection.

Как я уже писал, апдейт таблицы из трех столбцов вызывал исключение "Data type mismatch in criteria expression." причем типы параметров были точно правильными. Причина - неясна.

Решил я сегодня попытаться разобраться с этой фигней. И совершенно случайно всплыла в голове, фраза, сказанная [livejournal.com profile] belnetmon, когда он пытался завести проект, работающий с сервером через ADO. На дельфи, не на .NET: "Параметры надо указывать в том порядке, в котором они идут в запросе". Решил проверить(на самом деле будучи уже уверенным, что именно это причина ошибки):

Код с ошибкой )

Код без ошибки )

Итак, что мы получаем? А получаем мы, что имена параметрам указать можно и при работе с MSSQL они используются. А при работе с MS Jet ADO.NET МОЛЧА ложит на имена болт и проставляет параметры в запрос в том порядке, в каком их добавляли, и движок базы данных выдает ошибку несоответствия типа для условия where.

Более менее осмысленный способ отладки таких вещей - мониторинг запросов на уровне движка базы данных, но поиск по гуглу выдал только пару ссылок на коммерческое ПО с такой функциональностью (и то не факт, что оно в данном случае подойдет).