【发布时间】:2010-05-28 11:19:56
【问题描述】:
我有一个 C# 应用程序,它使用 OleDBConnection 连接到本地计算机上的命名 SQL Express 实例:
_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 资源管理器(相同的调试编译)运行应用程序,我会在 30 秒后在 Open() 行中收到“OleDBException: Login timeout expired”。 奇怪的是,即使我将调试器附加到 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()
我想用我在这里提供的信息找到问题可能很困难,但我不知道还能去哪里看或做其他测试,所以任何关于它可能是什么或我可以做什么测试的想法找出来将不胜感激。
【问题讨论】:
-
你是说当你不调试的时候,应用程序是从IIS运行的?
-
不,它是一个 WinForms 应用程序。换句话说:如果我在 VS 中按 F5 就可以了。如果我在 Windows 资源管理器中双击 exe,它会失败。如果我设置 VS 来启动 exe 并附加调试器,它也会失败。
-
我最好的猜测是你的并发连接用完了。 Express 只允许 5 我认为。如果您打开了 IDE 以及一两个其他工具(例如 Management Studio),您可能会达到 5 个。如果您打开了连接池之类的东西,可能是所有 5 个都绑定在某个地方?
-
@Cobusve:异常说,登录超时;它与并发连接有什么关系?
-
@Francesc:你检查数据库日志了吗? social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/…
标签: c# oledb sql-server-express oledbconnection oledbexception