分析:在finally中关闭了数据库连接对象,无论任何原因退出try块的时候,都会执行finally里的内容!
解决:使SqlDataReader.Close()时,数据连接也会自动关闭.
System.Data.SqlClient.SqlDataReader sdr = mycmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
连接关闭后不能再使用Reader了
保持一个原则:最晚连接数据库,用完立即关闭连接
reader当然可以return。
其实不用Dispose,用
cmd.ExecuteReader(CommandBehavior.CloseConnection);
那么当你在任意地方关闭这个return的reader的时候,这个reader所使用的连接也会关闭。
自己修改的
public OracleDataReader Select(string selString)
{
OracleDataReader dr = null;
OracleConnection conn = null;
try
{
conn = new OracleConnection(connStr);
OracleCommand sqlCmd = conn.CreateCommand();
sqlCmd.CommandType = CommandType.Text;
sqlCmd.CommandText = selString;
conn.Open();
dr = sqlCmd.ExecuteReader(CommandBehavior.CloseConnection);
//sqlCmd.Dispose();
//conn.Close();
}
catch (Exception ee)
{
throw ee;
}
//finally
//{
// conn.Close();
//}
return dr;
}
改成上面的样子就可以了,可是不知道以后咋关闭啊?!Close了Reader就自动关闭了?!