metaclass: (Default)
[personal profile] metaclass
Так вот, к вопросу об отладке MS Jet базы данных, заведенной через OleDbConnection.

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

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


Код с ошибкой:
cmd.CommandText = "update BaseData set Base_Value=@Val,Base_State=@State where Base_ID=@ID";
OleDbParameter prmid = cmd.Parameters.Add("@ID",OleDbType.Integer);
OleDbParameter prmval = cmd.Parameters.Add("@Val",OleDbType.LongVarChar);
OleDbParameter prmstate = cmd.Parameters.Add("@State",OleDbType.Integer);



Код без ошибки:
cmd.CommandText = "update BaseData set Base_Value=@Val,Base_State=@State where Base_ID=@ID";
OleDbParameter prmval = cmd.Parameters.Add("@Val",OleDbType.LongVarChar);
OleDbParameter prmstate = cmd.Parameters.Add("@State",OleDbType.Integer);
OleDbParameter prmid = cmd.Parameters.Add("@ID",OleDbType.Integer);


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

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

Date: 2006-09-03 09:42 pm (UTC)
From: [identity profile] 1ceheart.livejournal.com
Ну, JetDB таит в себе множество приятных открытий :)

Date: 2006-09-04 05:45 am (UTC)
From: [identity profile] vp.livejournal.com
Меня более поражает, что эта модель "абстракции" разрабатывалась, обсуждалась умными людями и в итоге была признана ХОРОШЕЙ.
Вообще, без комментариев.

ЗЫ Я от использования АДО категорически отказался.

Date: 2006-09-04 09:52 pm (UTC)
From: [identity profile] bagamut.livejournal.com
есть прикольный врапер OTL
если не используете изолейшн левелс то отлично работает, и быстро

Date: 2006-09-04 07:27 am (UTC)
From: [identity profile] jek-hor.livejournal.com
А коммерческие базы логов не ведут? В MySQL с этим просто...

Date: 2006-09-04 07:43 am (UTC)
From: [identity profile] metaclass.livejournal.com
Смотря какие. Некоторые ведут, у некоторых развитая инфраструктура отладки и диагностики, некоторые вообще никак.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 28th, 2025 12:48 am
Powered by Dreamwidth Studios