我是ODP.Net的新手,并试图将其应用到我们现有的系统中。目前,我们正在使用OLEDB并使用IDataReader接口从DataReader读取记录。但是,当我们使用相同的代码逻辑使用ODP.Net时,不会选择任何记录。所以,我的问题是,Oracle.DataAccess.Client.OracleDataReader(ODP.Net)是否实现了IDataReader接口?如果我尝试使用OracleDataReader读取记录而不使用IDataReader,则选择记录。
我正在使用ODP.Net 10.1.0.4, Oracle客户端10g, ASP.Net
编辑:
string lstSelect = fstSelect + pstWhereClause;
IDbConnection lidcConn = fobCreateCon.CreateConnection();
lidcConn.ConnectionString = fstConStr;
IDbCommand lidcComm = fobCreateCon.CreateCommand();
lidcComm.Connection = lidcConn;
lidcComm.CommandText = lstSelect;
if (palParams != null)
{
for (int i = 0; i < palParams.Length; i++)
{
IDbDataParameter lidpParam = fobCreateCon.CreateParameter(
fstParameterPrefix + "PARA" + i.ToString(), palParams[i]);
lidcComm.Parameters.Add(lidpParam);
}
}
IDataReader lidrReader = null;
try
{
lidcConn.Open();
lidrReader = lidcComm.ExecuteReader(CommandBehavior.CloseConnection);
bool lboReturn = lidrReader.Read();
if (lboReturn)
{
fobEmployee.AR_Grace = lidrReader.IsDBNull(0) ? 0 : lidrReader.GetDecimal(0);
fobEmployee.Card_Issued = lidrReader.IsDBNull(1) ? string.Empty : lidrReader.GetString(1);
}
lidrReader.Close();
return lboReturn;
}
finally
{
if (lidrReader != null)
{
if (!lidrReader.IsClosed)
lidrReader.Close();
lidrReader.Dispose();
}
if (lidcConn.State != ConnectionState.Closed)
lidcConn.Close();
lidcConn.Dispose();
lidcComm.Dispose();
}
以上是我们现在使用的代码。它与OLEDB,SQLClient完美配合。在ODP.Net上使用此代码时,不知何故没有记录返回。
我们设法在更改此
时选择记录OracleDataReader lidrReader = null;
try
{
lidcConn.Open();
lidrReader = (OracleDataReader)lidcComm.ExecuteReader(CommandBehavior.CloseConnection);
if (lidrReader.HasRow)
{
lidrReader.Read();
fobEmployee.AR_Grace = lidrReader.IsDBNull(0) ? 0 : lidrReader.GetDecimal(0);
fobEmployee.Card_Issued = lidrReader.IsDBNull(1) ? string.Empty : lidrReader.GetString(1);
}
lidrReader.Close();
}
我们无法将其更改为上述代码,因为它将涉及300多个数据文件类,我们希望此代码适用于其他数据库。有什么帮助吗?
答案 0 :(得分:2)
如果我们谈论System.Data.IDataReader
,答案是肯定的。实际上,OracleDataReader
继承自抽象类System.Data.Common.DbDataReader
,后者继承自System.Data.IDataReader
。
换句话说,Oracle在ADO.NET中运行良好,并且应该与其他ADO.NET提供程序一样或多或少地工作。
我没有尝试使用10.2.x之前的版本,但我怀疑情况发生了很大变化。我对OracleDataReader
没有任何问题。