代码之家  ›  专栏  ›  技术社区  ›  sikender

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

  •  0
  • sikender  · 技术社区  · 15 年前

    我在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 回复  |  直到 14 年前
        1
  •  1
  •   sikender    15 年前

    在此处设置连接字符串。

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

    try { sql_conn.Open(); }
                catch (Exception)
                {
                    if (sql_conn.State != ConnectionState.Closed)
                    {
                        sql_conn.Close();
                        sql_conn.Open();
                    }
                }
    
        2
  •  0
  •   Raj    15 年前

    我认为您应该打开一个连接,执行SQL语句并立即关闭连接。提供程序负责连接池。

        3
  •  0
  •   Steffen    15 年前

    就像Raj说的,我建议在有语句要运行时打开连接,然后在运行后再次关闭它——这是进行DB查询的最常见方法。

    也就是说,如果您希望随时打开一个连接,您应该在程序退出时关闭它(或者对于网站,在global.asax中关闭它,在application close、unload和类似的情况下关闭它(不记得有多少个,因为我从来没有这样做过)

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

    尽管如此,我仍然认为您应该考虑这样的构造(伪代码):

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

    当您将连接和命令放入using语句中时,它们将被正确地关闭(包括您的连接),并且您不会冒在DB服务器上有死连接的风险,以防代码中出现异常。

    显然,一个“最终尝试”结构也可以做到这一点,使用更漂亮。