实际上我的数据库连接是这样的…现在我想介绍连接池。我可以知道如何写这个吗?
public static string dbpath()
{
try
{
string strcon = @"Data Source=localSQLEXPRESS;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";
}
}
您不需要做任何特别的事情来利用连接池机制。
但是你的代码应该稍微改变一下:
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=localSQLEXPRESS;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...
}
这将使连接池中的连接数保持在限制之下,并且您的程序将正确地处理连接池
更多参考: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获得进一步连接的请求,它等待连接超时时间,然后错误输出。
强烈建议在连接达到目的后关闭或处置该连接。
只有配置相同的连接才能被池化。
当发生致命错误(如故障切换)时,自动清除池。
连接字符串在连接池中起着至关重要的作用。