【问题标题】:connection Pooling in Windows Forms in C#C# 中 Windows 窗体中的连接池
【发布时间】:2013-03-19 10:23:53
【问题描述】:

其实我的数据库连接是这样的...,现在我要介绍连接池。我可以知道如何写这个...,

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";
        }

    }

【问题讨论】:

标签: c# sql-server-2005 connection-string connection-pooling


【解决方案1】:

您不需要做任何特别的事情来利用connection pooling 机制。
但是你的代码应该稍微改变一下:

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

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 statement 编写连接的创建和打开 这将确保在出现异常时正确关闭和处置您的连接对象。
所以,假设你需要加载一个客户数据表,你可以这样写

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...
}

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

【讨论】:

  • 我在哪里使用代码写...;
  • 每次需要检索、更新、删除数据。我现在会更新答案
【解决方案2】:

更多参考:ADO.NET Connection Pooling

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

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

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

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;

这样,新连接会不断添加到池中,直到达到 Max Pool Size,之后当 ADO.NET 收到进一步连接的请求时,它会等待 Connection Timeout time 然后错误出来。

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

只有配置相同的连接才能被池化。

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

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

【讨论】:

    猜你喜欢
    • 2022-07-11
    • 2017-09-02
    • 1970-01-01
    • 2013-07-12
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    相关资源
    最近更新 更多