怎样释放DATAREADER的资源呢??
protected void gvxgclinfo_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{ //设置图书类型
string cl_district = e.Row.Cells[12].Text; //获取图书类型编号
string typeSql = "select * from zxd_cl_district where district_id=" + cl_district;
OracleDataReader typeSdr = dataOperate.getRow(typeSql);
typeSdr.Read(); //读取一条记录
e.Row.Cells[12].Text = typeSdr["district_name"].ToString();
}
}
注:getrow如下
public static OracleDataReader getRow(string sql)
{
try
{
OracleConnection con = createCon();
con.Open();
OracleCommand com = new OracleCommand(sql, con);
return com.ExecuteReader();
}
catch
{
return null;
}
finally
{ }
}
------解决方案--------------------
e.Row.Cells[12].Text = typeSdr["district_name"].ToString();
typeSdr.Dispose();
------解决方案--------------------.Dispose();
------解决方案--------------------LZ在使用datareader的时候需要注意下,在或者datareader的方法里面不能关闭连接,不然得到的datareader将无法使用,但是你如果不关闭连接的话在使用datareader后将它释放掉,此时连接也不算关闭的,所以建议datareader的写法为
C# code
public static OracleDataReader getRow(string sql)
{
try
{
OracleConnection con = createCon();
con.Open();
OracleCommand com = new OracleCommand(sql, con);
return com.ExecuteReader([color=#FF0000]CommandBehavior.CloseConnection[/color]);
}//在获取datareader的时候加了红色的部分后,将datareader释放时将同时断开连接
catch
{
return null;
}
finally
{ }
}
//使用datareader
using(OracleDataReader odr=getRow(sql))
{
//你的方法
}