2009-12-05 45 views
0

我在web.config文件中做出的连接字符串。.NET数据库连接池发生错误?

<connectionStrings> 
    <add name="Test_registration" 
    connectionString="Data Source=DOTNET\SA;Initial Catalog=Test2009;User ID=trainee;Password=trainee123" 
    providerName="System.Data.SqlClient"/> 
</connectionStrings> 

而在CS文件做出构造函数打开连接。

public main_connection() 
{ 
    sql_conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Test_registration"].ConnectionString); 
    sql.conn.open(); 
} 

但我在服务器上的程序运行取得连接池错误。

谁能告诉我,我应该关闭连接?在我的项目cs文件的web.config文件中,我打开连接?

我想我开始只是一个时间的连接编写的close()语句一次。

+0

请提供有关异常的堆栈跟踪信息。也给连接字符串(删除任何敏感信息)。 – 2009-12-05 17:29:06

+1

亚..我加入我的连接字符串到我的问题。现在告诉我如何解决它 – sikender 2009-12-05 18:01:05

回答

1

组连接字符串,这里更漂亮。

然后使用下面的代码。 (sql_conn是连接对象的名称)

try { sql_conn.Open(); } 
      catch (Exception) 
      { 
       if (sql_conn.State != ConnectionState.Closed) 
       { 
        sql_conn.Close(); 
        sql_conn.Open(); 
       } 
      } 
+1

10我通过在互联网上做研究得到了这一个。然后开发它。 – sikender 2009-12-07 18:46:46

0

我想你应该打开一个连接,执行SQL语句,并立即关闭连接。提供者负责连接池。

0

像拉吉说,我建议打开连接,只要你有运行语句,然后再次关闭它之后 - 这是应该做的数据库查询的最常见的方式。这就是说,如果您希望始终打开一个连接,您应该在程序退出时关闭它(或者在网站的情况下,关闭应用程序关闭,卸载和关闭Global.Asax类似的(不记得有多少,因为我从来没有做这种方式)

你的web.config不会自动关闭它!

有了这一切说,我仍然认为你应该考虑像建设取而代之(伪代码):

using (var conn = OpenConnection()) 
{ 
    using (var cmd = CreateCommand(conn)) 
    { 
     RunQuery(); 
    } 
} 

当您将Connection和Command放入使用语句中时,它们将被正确关闭(包括您的连接),并且在您的代码中出现异常情况下,您不会冒数据库服务器上存在死连接的风险。

显然一个try-finally建设将做同样的,用的就是刚刚:-)