我在我的程序中有这样的代码,我相信在数据被填充之后,它不会关闭连接。
public static string ConnectionInfo = System.Configuration.ConfigurationManager.ConnectionStrings["Default"].ConnectionString;
public static DataTable ExecuteQuery(string query, string table)
{
SqlConnection cnn = new SqlConnection(ConnectionInfo);
SqlDataAdapter Adp = new SqlDataAdapter(query, cnn);
DataSet Ds = new DataSet();
Adp.Fill(Ds, table);
return Ds.Tables[table];
}这个代码有什么问题吗?
发布于 2013-11-20 09:10:19
唯一的问题是您没有将using语句用于SqlConnection和DataAdapter。然而,DbDataAdapter.Fill打开并关闭了连接。
public static DataTable ExecuteQuery(string query, string table)
{
using(SqlConnection cnn = new SqlConnection(ConnectionInfo))
using(SqlDataAdapter Adp = new SqlDataAdapter(query, cnn))
{
DataTable tbl = new DataTable();
Adp.Fill(tbl);
return tbl;
}
}与SELECT语句关联的连接对象必须有效,但不需要打开。如果连接在调用Fill之前关闭,则打开它以检索数据,然后打开,然后关闭。如果在调用Fill之前连接是打开的,则它仍然是打开的。
请注意,
using语句也会隐含地关闭连接。DataAdapter.Fill(DataTable),因为您使用的是单个表编辑:我只是注意到您正在为表名使用一个参数。您也可以使用DbDataAdapter.Fill(DataSet, String)代替。这不会改变任何事情。
发布于 2013-11-20 09:09:20
添加一个using语句,以便可靠地关闭连接。这确保即使发生异常也关闭连接。更改代码如下:
public static DataTable ExecuteQuery(string query, string table)
{
using(SqlConnection cnn = new SqlConnection(ConnectionInfo))
{
SqlDataAdapter Adp = new SqlDataAdapter(query, cnn);
DataSet Ds = new DataSet();
Adp.Fill(Ds, table);
return Ds.Tables[table];
}
}https://stackoverflow.com/questions/20091528
复制相似问题