背景
开发测试一个系统的时候有一部分用的是SQLServer,连的公司大服务器的数据库,结果发现有时候会好好的就断掉,当时还以为服务器不对了,结果仔细检查了一下可能是后台代码的问题,当时是这样写的:
语言是C#
public static string connStr = FlagKeys.SqlServer;
public static SqlConnection cnn = new SqlConnection(connStr);
public static DataTable GetDataTable(string sql)
{
conn.Open();
SqlDataAdapter adapter = new SqlDataAdapter(sql, cnn);
DataSet ds = new DataSet();
adapter.Fill(ds);
return ds.Tables[0];
}
这是用sql进行查询,返回一个数据表
解决方案
这种写法其实犯了一个比较低级的错误,因为没有用using释放内存,导致有时访问数据库会造成等待;改成这样写就OK了
/// <summary>
/// 返回数据表
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public static DataTable GetDataTable(string sql)
{
using (SqlConnection conn = new SqlConnection(connStr))
{
try
{
conn.Open();
SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
DataSet ds = new DataSet();
adapter.Fill(ds);
return ds.Tables[0];
}
catch (Exception ex)
{
//捕捉异常,记录日志
}
finally
{
if(conn!=null)
conn.Close();
}
}
return null;
}
测试后发现数据库就不掉了。