2009-10-09 1 views
0

저는 ODP.Net을 처음 사용하고 기존 시스템에이를 구현하려고합니다. 현재 OLEDB를 사용하고 IDataReader 인터페이스를 사용하여 DataReader에서 레코드를 읽습니다. 그러나 동일한 코드 논리를 사용하는 ODP.Net을 사용하면 레코드가 선택되지 않습니다. 그래서, 내 질문은, Oracle.DataAccess.Client.OracleDataReader (ODP.Net) IDataReader 인터페이스를 구현합니까? IDataReader를 사용하지 않고 OracleDataReader를 사용하여 레코드를 읽으려고 시도하면 레코드가 선택됩니다. 내가 ODP.Net 10.1.0.4 사용하고Oracle.DataAccess.Client.OracleDataReader (ODP.Net)는 IDataReader 인터페이스를 구현합니까?

, 오라클 클라이언트 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에 대해 이야기하는 경우 대답은 예입니다. 실제로 OracleDataReaderSystem.Data.IDataReader에서 상속받은 추상 클래스 System.Data.Common.DbDataReader에서 상속합니다.

즉, 오라클은 ADO.NET과 잘 어울리고 다른 ADO.NET 제공 업체와 다소 차이가 있습니다.

10.2.x 이전 버전을 사용해 본적이 없지만 많은 변화가있었습니다. OracleDataReader에 문제가 없습니다.

관련 문제