Microsoft.Data.SqlClient를 사용한 ADO.NET 아키텍처

ADO.NET는 .NET에 내장된 데이터 접근 모델입니다. Microsoft. Data.SqlClient는 SQL Server 호환 데이터베이스에 해당 모델을 구현하고 SQL Server 전용 기능을 추가합니다.

Microsoft. Data.SqlClient 랜딩 페이지는 드라이버 기능 맵과 생산 기준선을 제공합니다. 이 글에서는 드라이버가 ADO.NET에서 어떻게 맞는지 설명합니다.

ADO.NET 추상화 및 SqlClient 타입

ADO.NET는 네임스페이스에서 System.Data.Common 제공자 독립적 추상화를 정의합니다. Microsoft. Data.SqlClient는 구체적인 구현을 제공합니다.

ADO.NET 추상화 SqlClient 타입 Purpose
DbConnection SqlConnection 하나의 데이터베이스에 논리적 연결을 엽니다.
DbCommand SqlCommand SQL 텍스트 또는 저장 프로시저를 실행합니다.
DbParameter SqlParameter 명령어 텍스트와 별도로 타이핑된 값을 전송합니다.
DbDataReader SqlDataReader 서버로부터 결과 행을 순차적으로 전송합니다.
DbTransaction SqlTransaction 명령을 하나의 원자 트랜잭션으로 묶습니다.
DbDataAdapter SqlDataAdapter 연결이 끊긴 DataSetDataTable 객체를 채우고 업데이트합니다.
DbBatch SqlBatch 지원되는 대상 프레임워크에 여러 명령을 하나의 배치로 전송합니다.

라이브러리가 여러 데이터베이스 제공자를 지원해야 할 때 ADO.NET 추상화에 대응하여 프로그래밍합니다. 애플리케이션이 SQL Server를 목표로 하며 제공자 특화 기능이 필요할 때 SqlClient 타입을 사용하세요.

연결된 데이터 접근

연결된 접근은 명령이 실행되는 동안과 애플리케이션이 결과를 읽는 동안 연결을 유지합니다.

일반적인 요청은 다음과 같은 순서를 따릅니다:

  1. 연결 문자열을 사용하여 SqlConnection를 만드세요.
  2. 연결을 엽니다.
  3. SqlCommand을(를) 만들고 SqlParameter 값을 추가하세요.
  4. 명령을 실행합니다.
  5. 스칼라 값, 영향받은 행 수 또는 SqlDataReader를 처리합니다.
  6. 리더, 명령 및 연결을 해제하세요.

대부분의 웹 API, 서비스, 작업자, 명령줄 애플리케이션에 대해 연결된 접속 방식을 사용하세요. SqlDataReader 행을 스트리밍하며, 보통 전체 결과를 DataSet.에 로드하는 것보다 적은 메모리를 사용합니다.

각 작업 단위마다 SqlConnection를 열고 폐기하는 것이 일반적인 방식입니다. 연결 풀링은 기본 물리적 연결을 재사용합니다. 애플리케이션 수명 동안 하나의 글로벌 연결을 열어두지 마세요.

비연결 데이터 액세스

SqlDataAdapter는 SQL Server와 인메모리 DataSet 또는 DataTable 간에 데이터를 전송합니다. 애플리케이션은 메모리 내 데이터를 읽거나 변경하는 동안 연결을 종료한 후 다시 연결하여 업데이트를 제출할 수 있습니다.

필요할 때는 접속 차단 기능을 활용하세요:

  • DataSet 또는 DataTable에 대한 데이터 바인딩.
  • 메모리 내 관계와 제약 조건.
  • 오프라인 편집 후 나중에 조정되는 경우.
  • DataAdapters를 중심으로 구축된 기존 애플리케이션과의 호환성.

새로운 요청 기반 서비스의 경우, 분리된 객체 모델이 필요한 경우가 아니라면 SqlDataReaderSqlCommand부터 시작하세요.

SQL Server 고유 기능

Microsoft. Data.SqlClient는 제공자 독립적인 ADO.NET 계약에 포함되지 않은 API와 연결 동작을 추가합니다:

  • Microsoft Entra 인증 및 액세스 토큰 콜백.
  • TDS 8.0의 엄격한 암호화와 SQL Server 인증서 옵션.
  • 항상 암호화되고 안전한 엔클레이브를 사용하세요.
  • SqlBulkCopy 고처리량 데이터 로딩을 위해.
  • 테이블 형식의 매개 변수.
  • SQL Server 데이터 타입, JSON과 벡터 타입을 포함합니다.
  • 설정 가능한 재시도 로직.
  • SQL Server 진단, 통계, 카운터.
  • 가용성 그룹 및 장애 전환 연결 옵션.

이 기능들을 사용하면 그 코드가 Microsoft와 연결됩니다. Data.SqlClient. 나머지 애플리케이션이 제공자 독립성을 유지해야 한다면, 제공자 전용 코드를 데이터 접근 경계 뒤에 두세요.

객체 수명과 동시성

연결, 명령, 리더, 트랜잭션, 대량 복사 객체를 신속히 폐기하세요. 형식이 IAsyncDisposable를 구현하는 경우 비동기 코드에서는 await using를 사용하세요.

SqlConnection SqlCommand, , SqlDataReader, , SqlTransaction 그리고 여러 스레드의 동시 사용을 지원하지 않습니다. 각 동시 작업을 별도의 연결로 만들고 연결 풀링에 의존하세요. 다중 활성 결과 집합(MARS)은 연결에 여러 활성 결과 집합을 허용하지만, SqlClient 객체를 스레드 안전으로 만들지는 않습니다.

패키지와 네임스페이스

NuGet 패키지를 Microsoft.Data.SqlClient 설치하고 네임스페이스를 Microsoft.Data.SqlClient 가져오세요. 드라이버는 .NET와 독립적으로 배포되기 때문에, 기능, 출시, 지원 일정이 .NET 런타임과 다릅니다.

System.Data.SqlClient는 더 오래된 제공업체입니다. 신규 개발에는 Microsoft.Data.SqlClient를 사용하세요. 기존 애플리케이션의 경우 System.Data.SqlClient에서 Microsoft.Data.SqlClient로 마이그레이션을(를) 참조하세요.