以前是用GotDotNet.ApplicationBlocks.Data 3.0版的访问类 以OleDb方式访问Oracle 817的.很好。
但是在连Oracle 816时不稳定的一塌糊涂。所以打算用OracleClient来访问。重构代码。
不过在重构时有两种方法。自己有点拿不定主意。
以下是以前的封装函数。
当时直接返回IDataReader类型的Reader.
static public IDataReader ComFun_ExeReader(string Sql)
{
AdoHelper helper = GetAdoHelper("OleDb");
IDataReader myreader=helper.ExecuteReader(GetConnectionString("OleDb"),CommandType.Text,Sql);
return myreader;
}
{
AdoHelper helper = GetAdoHelper("OleDb");
IDataReader myreader=helper.ExecuteReader(GetConnectionString("OleDb"),CommandType.Text,Sql);
return myreader;
}
重构方法1:
生成一个OracleDataReader ,然后强制类型转化成IDataReader。这样以前一行代码都不用动就可以。但是不知类型转化上会不会出问题。粗粗试了一下好像可以。代码也能通。
IDataReader ComFun_ExeReader(string Sql)
{
OracleConnection Conn=new OracleConnection("....");
OracleCommand Cmd=new OracleCommand();
Cmd.CommandText=Sql;
Cmd.Connection=Conn;
Conn.Open();
OracleDataReader Reader= Cmd.ExecuteReader(CommandBehavior.CloseConnection);
return (IDataReader)Reader;
}
{
OracleConnection Conn=new OracleConnection("....");
OracleCommand Cmd=new OracleCommand();
Cmd.CommandText=Sql;
Cmd.Connection=Conn;
Conn.Open();
OracleDataReader Reader= Cmd.ExecuteReader(CommandBehavior.CloseConnection);
return (IDataReader)Reader;
}
但是如果可以这样easy的把OracleDataReader 转成IDataReader 的话。
为什么大家在写代码时都大量的用与数据库相关的Reader,把自己的程序写的绑死到专用数据库上,弄的以后数据库转型都不好转。比如OracleDataReader ,还有mssqlserver的专用DataReader呢。
难到只是为了性能。????????????????。狂想不通呀。总不会说大家没想到这一点吧。:(不然为什么大家又要用专用的reader.。刚才在新联组上又有人说这种方法更糟。可是试试好像没有出问题呀。:(
重构方法2:
就是直接返回OracleDataReader 。然后把所有用到封装函数的地方
比如 IDataReader Reader=ComFun_ExeReader("select person_id,Person_name from person");
转成 OracleDataReader Reader=ComFun_ExeReader("select person_id,Person_name from person");
不过这样的工作量实在是大的要疯掉为止。
要改动的代码行目前算了一下可能有252个cs要改。一共856个文件。
就是用IDE的替换功能,也会把我吓得开始怀疑代码是否可以安全编译通过。