-2

实际上我的数据库连接看起来像这样......,现在我想介绍连接池。我可以知道如何写这个...,

public static string dbpath()
    {
        try
        {
            string strcon = @"Data Source=local\SQLEXPRESS;Initial Catalog=aniv;Integrated Security=True";
           SqlConnection con = new SqlConnection(strcon);
            if (con.State == ConnectionState.Open)
            {
                con.Close();
            }
            con.Open();
            return strcon;
        }
        catch (SqlException ex)
        {
            MessageBox.Show(ex.Message);
            return "0";
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            return "0";
        }

    }
4

2 回答 2

1

您不需要做任何特别的事情来获得连接池机制的优势。
但是,您的代码应稍作更改:

首先,您可以从代码中删除对已打开连接的检查

SqlConnection con  = new SqlConnection(strcon);
// Has been created here, it is always closed
//if (con.State == ConnectionState.Open)
//{
//    con.Close();
//}

其次,返回连接对象,而不是连接字符串。(请注意,我还删除了 try/catch 块,我认为最好由比这更顶级的程序处理异常情况)

public static SqlConnection dbconnection()
{
   string strcon = @"Data Source=local\SQLEXPRESS;Initial Catalog=aniv;Integrated Security=True";
   SqlConnection con = new SqlConnection(strcon);
   con.Open();
   return con;

}

这将允许您使用 using 语句编写连接的创建和打开, 这将确保在出现异常时正确关闭和处置您的连接对象。
所以,假设你需要加载一个客户数据表,你可以写这样的东西

using(SqlConnection cn = dbconnection())
{
    string sqlText = "SELECT * FROM Customers ORDER BY CustomerName";
    SqlCommand cmd = new SqlCommand(sqlText, con);
    DataTable dtCustomers = new DataTable();
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    da.Fill(dtCustomers);
    // Do what you want with the datatable (bind to a grid, return to do more processing...
}

这将使池中的连接数保持在限制范围内,并且您的程序将在连接池方面正确运行

于 2013-03-19T10:28:49.810 回答
0

更多参考:ADO.NET 连接池

每个连接池都与一个不同的连接字符串相关联,而且它也是特定于应用程序的。

首次打开连接时,会根据精确匹配算法创建连接池,该算法将池与连接中的连接字符串相关联。

带有池化相关关键字的示例连接字符串:

initial catalog=Northwind; Data Source=localhost; Connection Timeout=30; 
User Id=MYUSER; Password=PASSWORD; Min Pool Size=20; Max Pool Size=200; 
Incr Pool Size=10; Decr Pool Size=5;

这样,新连接会不断添加到池中,直到达到最大池大小,之后当 ADO.NET 收到进一步连接的请求时,它会等待连接超时时间然后出错。

强烈建议我们在连接达到目的后关闭或处置连接。

只能汇集具有相同配置的连接。

当发生致命错误(例如故障转移)时,池会自动清除。

连接字符串在连接池中起着至关重要的作用。

于 2013-03-19T10:28:59.890 回答