Страница 1 из 1

+ IADORecordBinding = активно неработающее приложение.

Добавлено: 12 фев 2007, 17:55
vg
Если какие-то скрытые грабли при использовании байндинг к рекордсет для MySQL?
Проблема в том, что для совершенно вменяемых вызовов хранимых процедур MySQL случается экзепшн-ы. Постоянно! ODBC лог (на клиенте) пишет, что соединение с сервером потеряно. В тоже время, error и qury лог на mysql пишет, что клиент получил ошибку чтения данных и сервер сделал аборт соединению. com_error же пишит в экзепшн обычные для M$ просто невменяемые вещи, типа нет ресурсов.

Интересно, что если заменить вызов хранимых процедур на текст соответствующих запросов, то до какого-то момента работает. Особено плохо тем процедурам, где в теле запросов находятся union, или подзапросы. Может не в IADORecordBinding дело?

Буду благодарен за помощь.

ПС. Курсоры - серверные, таймауты по умолчанию. В принципе, хотя запросы и тяжёлые в процедурах, но время исполнения (в SQL browser) не более 300 ms.

Добавлено: 14 фев 2007, 17:14
vg
Похоже MySQL не поддерживает серверные курсоры ADO. Даже если явно установить для _ConnectionPtr курсор adUseServer (что честно наследует _CommandPtr или _RecordsetPtr), то в дампе TCP/MySQL protocol видно, что MySQL передаёт клиенту весь набор данных, запрошенный или запросом или хранимой процедурой.

Оказалось также, что проблема с потерей соединения характерна для тех хранимых процедур, которые вызываются в цикле на клиенте. Такое впечатление, что это баг сервера MySQL, а не клиентской части. Интересно и то, что для ADO.NET 1.0.7 connector для MySQL аналогичных проблем не наблюдается пока.