2009-03-03 8 views
2

아래 코드는 Oracle 데이터베이스에 연결하고 데이터를 DataTable에 채우는 테스트입니다. 문을 실행 한 후 da.Fill (dt);, 난 항상 데이터를 DataTable에 채우려 할 때 항상 예외가 발생합니다.

를 제외하고 얻을 "형식 'System.OutOfMemoryException'의 예외가 발생했습니다."

이런 종류의 오류가 발생 했습니까? 내 프로젝트는 VS 2005에서 실행 중이며 Oracle 데이터베이스 버전은 11g입니다. 내 컴퓨터가 Windows Vista를 사용 중입니다. Windows XP에서이 코드를 복사하면 정상적으로 작동합니다.

감사합니다.

using System.Data; 
using Oracle.DataAccess.Client; 

... 

string cnString = "data source=net_service_name; user id=username; password=xxx;"; 
OracleDataAdapter da = new OracleDataAdapter("select 1 from dual", cnString); 

try 
{ 
    DataTable dt = new DataTable(); 
    da.Fill(dt); // Got error here 
    Console.Write(dt.Rows.Count.ToString()); 

} 
catch (Exception e) 
{ 
    Console.Write(e.Message); // Exception of type 'System.OutOfMemoryException' was thrown. 
} 

업데이트 내 컴퓨터에 무슨 생각이 없다. Oracle 11g을 다시 설치하기 만하면 정상적으로 작동합니다.

+0

두 컴퓨터의 오라클 드라이버 및 .NET 데이터 공급자 버전은 동일합니까? Vista 용 Oracle 드라이버에 사용할 수있는 패치가 있습니까? 설치하지 않았습니까? –

답변

0

dual 테이블의 크기는 어느 정도입니까? 이 쿼리 :

select 1 from dual 

는 모든 행에 1의 dual 테이블로 많은 행이 단일 열 테이블을 반환합니다. 테이블에 수백만 개의 행이있는 경우 메모리 부족 예외가 발생하면 놀라지 않을 것입니다. 뭔가 구현 특정 않는 한이 (두 개의 다른 워크 스테이션에서 데이터베이스의 다른 인스턴스를 조회, 예를 들어), 비스타에서 XP에서 작동하지만 왜 물론

편집,이 설명하지 않습니다.

편집 2 : 귀하의 의견은 쿼리가 단일 행을 반환 나타 내기 때문에

좋아, 그래서 아마도 dual에 하나 개의 행이 있습니다.

몇 가지 조사하기 :

  1. 오라클 ADO.NET 연결, 오른쪽 Oracle 클라이언트 소프트웨어가 필요합니다? Vista 상자의 Oracle 소프트웨어가 XP 상자와 동일한 버전입니까? 아마도 거기에 불일치가있을 것입니다.

  2. e.Message을 표시하는 대신 e.ToString()을 표시하여 전체 스택 추적을 얻으십시오. 그러면 오류가 어디에서 던져지고 있는지 더 자세히 알 수 있습니다.

+0

쿼리는 1 행만 반환하고 값은 1입니다. –

+0

Oracle에서는 MS SQL Sever에서와 같이 "select 1"을 쓸 수 없습니다. 하지만 이중 "pseudotable"이 있으므로 "select one from dual"이라고 쓰면 같은 결과를 얻을 수 있습니다. 참조 : "http://en.wikipedia.org/wiki/DUAL_table". –

+0

아 알아 줘서 고마워요 - 고마워요 @tomekszpakowicz! –

관련 문제