发生.NET数据库连接池错误?

时间:2009-12-05 17:27:30

标签: c# .net asp.net

我在web.config文件中创建了连接字符串。

<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()语句,因为我只启动一次连接。

3 个答案:

答案 0 :(得分:1)

在这里设置连接字符串。

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

像Raj说的那样,每当你有一个语句要运行时,我建议打开连接,然后再关闭它 - 这是进行数据库查询的最常用方法。

话虽这么说,如果您希望一直打开Connection,您应该在程序退出时关闭它(或者在网站的情况下,在应用程序关闭,卸载和类似的Global.Asax中关闭它) (不记得有多少,因为我从来没有这样做过)

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

所有这些说法我仍然认为你应该考虑这样的结构(伪代码):

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

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

显然,try-finally结构也会这样做,使用起来更漂亮: - )