Соединение OleDB работает только при отладке

У меня есть приложение C#, которое подключается к именованному экземпляру SQL Express на локальном компьютере с помощью OleDBConnection:

_connection = new OleDbConnection(_strConn);
_connection.Open();

_strConn is something like this: "Provider=sqloledb;Data Source=.\NAMEDINSTANCE;Initial Catalog=dbname;User Id=sa;Password=password;"

Если я отлаживаю приложение, соединение работает нормально. Если я запускаю приложение из проводника Windows (тот же отладочный компилятор), я получаю сообщение «OleDBException: время ожидания входа истекло» в строке Open() через 30 секунд. Странно то, что исключение происходит, даже если я подключаю отладчик к exe. Я вижу, что строка подключения верна, и все выглядит нормально. Я также не могу найти дополнительную информацию в журнале ошибок SQL Express или мониторе активности SQL.

Если это поможет, вот исключение:

    System.Data.OleDb.OleDbException: Login timeout expired
   at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
   at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
   at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
   at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   at System.Data.OleDb.OleDbConnection.Open()

Я предполагаю, что найти проблему с информацией, которую я здесь даю, может быть сложно, но я не знаю, где еще искать или какие другие тесты делать, поэтому любые идеи о том, что это может быть или какой тест я мог бы сделать, чтобы выяснить будет действительно оценен.


person Francesc Castells    schedule 28.05.2010    source источник
comment
Вы говорите, что когда вы не отлаживаете, приложение запускается из IIS?   -  person Jay    schedule 28.05.2010
comment
Нет, это приложение WinForms. Другими словами: если я нажму F5 в VS, он сработает. Если я дважды щелкну исполняемый файл в проводнике Windows, произойдет сбой. Если я настрою VS для запуска исполняемого файла и присоединения отладчика, он тоже выйдет из строя.   -  person Francesc Castells    schedule 28.05.2010
comment
Я бы предположил, что у вас заканчиваются одновременные соединения. Экспресс позволяет только 5, я думаю. Если у вас открыта IDE, а также один или два других инструмента, таких как Management Studio, вы можете достичь 5. Если у вас включено что-то вроде пула соединений, может быть, все 5 где-то связаны?   -  person Cobusve    schedule 28.05.2010
comment
@Cobusve: исключение говорит: время ожидания входа в систему; как это может относиться к одновременным соединениям?   -  person KMån    schedule 28.05.2010
comment
@Francesc: Вы проверяли журналы базы данных? social.msdn.microsoft. com/forums/en-US/adodotnetdataproviders/   -  person KMån    schedule 28.05.2010
comment
@KMan: я уже подписался на этот пост. Я не вижу никакой ошибки или подсказки в журнале SQL Server. Что я вижу, так это то, что при подключении в журнале появляется spid51 Starting up database 'dbname'. и когда это не работает, в журнал не добавляются записи. Было бы неплохо увидеть сбой соединения из-за xxx.   -  person Francesc Castells    schedule 28.05.2010
comment
@Francesc: Вы пытались увеличить время ожидания по умолчанию?   -  person ajdams    schedule 28.05.2010
comment
Ну, это забавно... тайм-аут по умолчанию составляет 30 секунд. Я установил его на 60 секунд, и произошло подключение через 31 секунду! Я установил его на 31 секунду (просто для удовольствия), и он зависает (мертвая блокировка или что-то в этом роде). Вопрос теперь в том, почему при отладке в VS соединение происходит немедленно, а из exe - 31 секунду?   -  person Francesc Castells    schedule 28.05.2010


Ответы (1)


Я починил это. К сожалению, я действительно не знаю, как: я удалил выходную папку, сбросил некоторые ссылки на проект, перенастроил несколько вещей в SQL Express, перезапустил машину и т. д. В какой-то момент он снова начал работать нормально. Меня по-прежнему раздражает невозможность обнаружить, что делал OleDb в течение 31 секунды при подключении, но проблема исчезла (пока).

Спасибо за вашу помощь.

person Francesc Castells    schedule 29.05.2010