2013-09-05 4 views
0

У меня есть клиентское приложение C++ .NET 2003 с использованием Sybase 15, который подключается к серверу базы данных Sybase 12.5 с использованием ASEOLEDB. Клиентский код строит строку соединения и выполняет хранимую процедуру, вызывая the Microsoft library function CCommand::Open.Клиентское соединение ASEOLEDB прерывается с перерывами

В большинстве случаев CCommand :: Open возвращает S_OK и код продолжается. Однако, казалось бы, случайным образом, этот вызов начнет возвращать E_FAIL. База данных, хранимая процедура и ввод все одинаковы. Это будет продолжаться 20-30 минут, а затем, казалось бы, разрешится и снова начнет работать.

Когда проблема возникает, я могу использовать Toad для Sybase для выполнения хранимой процедуры с тем же входом без проблем. Я также могу использовать более старую версию клиентского приложения, которое использует Sybase 11, у которого также нет проблем. Я также могу запустить скрипт в PowerShell с той же строкой соединения Sybase 15, которая также успешно выполняется.

Я подозреваю, что какая-то разница в пуле соединений между клиентским кодом Sybase 11 и Sybase 15 является проблемой, но я не знаю, как ее доказать/опровергнуть/изолировать причину.

Возможно связанный с этим вопрос: Intermittent Oledb connection error “Cannot open database ''.”

ответ

0

Я нашел этот вопрос с драйвером Sybase OLE DB, который мы использовали (sybdrvoledb.dll версии 15.0.0.356). Когда я заменил папку Sybase/DataAccess/OLEDB/dll папкой dll из версии Sybase 15.7, проблема не возникнет. Я использовал DLL-файлы из Sybase 15.7.0.80 и 15.7.0.1000, и оба исправили проблему.

Смежные вопросы