답변:
반면에, 그것은 :
비용 :
따라서 실제로는 수행중인 작업에 따라 다르지만 데이터 세트에서만 지원되는 것이 필요할 때까지 DataReader를 선호하는 경향이 있습니다. SqlDataReader는 읽기 전용 그리드에 바인딩하는 일반적인 데이터 액세스 사례에 적합합니다.
자세한 내용 은 공식 Microsoft 설명서를 참조하십시오 .
while (reader.Read())루프 내에서 DataReader 캐스트를 IDataRecord로 리턴하십시오 .
그것에 대한 대답은 매우 광범위 할 수 있습니다.
기본적으로, 사용 결정에 영향을 미치는 주요 차이점은 SQLDataReader를 사용하면 데이터베이스에서 데이터를 "스트리밍"한다는 것입니다. SQLDataAdapter를 사용하면 데이터베이스에서 CRUD 조작을 수행 할뿐만 아니라 추가로 조회 할 수있는 오브젝트로 데이터를 추출합니다.
분명히 데이터 스트림을 사용하면 SQLDataReader가 훨씬 빠르지 만 한 번에 하나의 레코드 만 처리 할 수 있습니다. SQLDataAdapter를 사용하면 데이터베이스에서 쿼리와 일치하는 행을 완전히 수집하여 코드를 처리 / 통과 할 수 있습니다.
경고 : SQLDataReader, ALWAYS, ALWAYS, ALWAYS를 사용하는 경우 SQLDataReader를 사용하여 연결을 열어두기 때문에 연결을 닫는 데 적합한 코드를 작성해야합니다. 이를 수행하지 않거나 결과 처리 오류가 발생하는 경우 연결을 닫는 적절한 오류 처리 는 연결 누수로 인해 응용 프로그램을 중단 시킵니다.
내 VB를 사면하지만 SqlDataReader를 사용할 때 필요한 최소 코드 양입니다.
Using cn As New SqlConnection("..."), _
cmd As New SqlCommand("...", cn)
cn.Open()
Using rdr As SqlDataReader = cmd.ExecuteReader()
While rdr.Read()
''# ...
End While
End Using
End Using
동등한 C # :
using (var cn = new SqlConnection("..."))
using (var cmd = new SqlCommand("..."))
{
cn.Open();
using(var rdr = cmd.ExecuteReader())
{
while(rdr.Read())
{
//...
}
}
}
SqlDataAdapter는 일반적으로 DataSet 또는 DataTable을 채우는 데 사용되므로 연결이 종료 된 후 (연결이 끊긴 액세스) 데이터에 액세스 할 수 있습니다.
SqlDataReader는 일반적으로 DataSet / DataTable을 채우는 것보다 빠른 경향이있는 빨리 감기 전용 및 연결된 커서입니다.
또한 SqlDataReader를 사용하면 한 번에 한 레코드 씩 데이터를 처리하고 메모리에 데이터를 보유하지 않습니다. 분명히 DataTable 또는 DataSet을 사용하면 메모리 할당 오버 헤드가 있습니다.
데이터를 메모리에 보관할 필요가 없으므로 렌더링 전용으로 SqlDataReader로 이동하십시오. 연결이 끊긴 방식으로 데이터를 처리하려면 DataAdapter를 선택하여 DataSet 또는 DataTable을 채우십시오.
데이터베이스에서 메모리 내 DataSet / DataTable을 채우려면 SqlDataAdapter를 사용하십시오. 그런 다음 연결을 닫거나 처분하고 데이터 테이블 / 세트를 메모리에 전달할 수 있습니다. 그런 다음 InsertCommand / UpdateCommand와 함께 데이터 어댑터를 사용하여 데이터를 조작하고 DB에 다시 유지할 수 있습니다.
비즈니스 로직을 중심으로 데이터를 전달할 수있는 유연성 없이도 메모리가 적은 풋 프린트 데이터 액세스를 원할 경우 SqlDataReader를 사용하십시오. SqlDataAdapter 방식을 사용하면 모든 데이터를 한 번에 메모리에 모두로드하지 않기 때문에 대용량 데이터 볼륨의 빠른 메모리 부족 사용량 검색에 더 적합합니다. SqlDataAdapter 방식을 사용하면 DataSet / DataTable에 모든 데이터가 채워집니다. 많은 행과 열이 있으므로 많은 메모리가 필요합니다.