2009-10-09 34 views
0

我是ODP.Net的新成員,並試圖將其實施到我們現有的系統中。目前,我們使用OLEDB並使用IDataReader接口從DataReader讀取記錄。但是,當我們使用相同的代碼邏輯使用ODP.Net時,沒有選擇記錄。所以,我的問題是,Oracle.DataAccess.Client.OracleDataReader(ODP.Net)是否實現了IDataReader接口?如果我嘗試使用OracleDataReader讀取記錄而不使用IDataReader所選記錄。Oracle.DataAccess.Client.OracleDataReader(ODP.Net)是否實現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個數據文件中的類,我們希望此代碼爲其他數據庫的工作。任何幫助?

回答

2

如果我們在談論System.Data.IDataReader,答案是肯定的。實際上,OracleDataReader繼承自抽象類System.Data.Common.DbDataReader,它繼而從System.Data.IDataReader繼承。

換句話說,Oracle可以很好地處理ADO.NET,並且應該像其他ADO.NET提供程序一樣工作。

雖然我還沒有嘗試過10.2.x之前的版本,但是我懷疑事情已經發生了很大的變化。 OracleDataReader我沒有問題。