System.OutofMemory 예외의 원인 일 수있는 데이터베이스에서 Dataset으로 많은 레코드 집합을 내보내는 중입니다. 이를 방지하기 위해 SQL Datareader를 사용하기로 결정했습니다. 내 관심은 표현을 변경해서는 안되며 BL에서 최소한의 코드 변경이 있어야한다. 나는 SQL 리더를 사용하여 데이터를 검색하고 데이터 세트를 채우고 BL로 돌아 가야하는 DL에 메소드를 작성해야한다.SQL Datareader를 C#의 데이터 집합으로 변환
답변
DataTable.Load() 메서드를 사용할 수 있습니다.
대신 DataReader를 사용하여 데이터를 가져 오려고합니다. 많은 양의 데이터를 처리해야하기 때문에 DataAdapter를 사용해야합니다. ExecuteReader()를 사용하면 점점 데이터 테이블에로드됩니다. 그럼 이것이 좋은 접근 방법인지 여부. ? – kbvishnu
@Harie - Load() 메서드를 제안합니다. Fill()은 특히 하나 이상의 테이블을 추가하는 DataSet을 채우는 데 사용되며 관계를 만드는 등의 작업에 사용됩니다. 스콧 미첼 (Scott Mitchell) - http://www.4guysfromrolla.com/articles/050405-1.aspx – adatapost
사용자 또는 프레임 워크가 DataSet을 채우는 지 여부에 관계없이 OutOfMemoryException이 발생합니다. return an IEnumerable을 처리하고 BL 코드를 변경하여 처리해야합니다.
또는 메모리 조각화를 피하기 위해 DataTable.MinimumCapacity을 설정할 수도 있습니다.
+1에 동의합니다. 데이터 웨어레이터를 통해 메모리 사용량을 줄이는 방법은 무엇입니까? 아마도 DataTable처럼 보이지만 실제로 행 데이터를 반환하기 위해 내부에 ienumerabe가있는 객체로 미친 짓을하는 것이 가능할 수도 있습니다. 까다로울 수는 있지만 BL을 기록하는 데 따른 문제를 예방할 수 있습니다. – Chris
SqlDataAdapter.Fill (DataTable)을 사용하는 것에 대해 생각 해보았습니까? – Dani
현재 DataAdapter를 사용하여 데이터 세트에 레코드를 채 웁니다. – banupriya
테이블에서 모든 데이터를 얻으려고하거나 특정 기준과 일치하는 레코드 만 얻으려고합니까? – Dani