Microsoft .NET에서 .NET 공급자를 사용하는 경우 애플리케이션에 원활하게 통합하기 위해 다양한 구성 요소와 해당 종속성을 이해하는 것이 중요합니다. 이 문서에서는 .NET 공급자의 필수 측면, 기본 검색 경로 및 문제 해결 지침을 간략하게 설명합니다.
참고 항목
이 문서에서는 .NET Core 설치를 다루지 않습니다.
Microsoft .NET 데이터 공급자
Microsoft .NET에는 .NET Framework와 함께 제공되는 4개의 데이터 공급자가 포함되어 있습니다.
- System.Data.SqlClient
- System.Data.Odbc
- System.Data.OleDb
- System.Data.OracleClient
처음 세 가지는 System.Data.DLL 포함되고 마지막 세 가지는 System.Data.OracleClient.DLL 포함됩니다. 애플리케이션을 빌드할 때 프로젝트에 적절한 DLL("어셈블리"라고도 함)에 대한 참조만 추가하면 됩니다. 그런 다음 공급자를 사용할 수 있습니다.
System.Data.SqlClient는 SQL Native Client와 유사한 구현 코드를 포함하며 OLE DB 또는 ODBC API를 전혀 사용하지 않습니다.
System.Data.Odbc 및 System.Data.OleDb 는 내재된 데이터베이스 기능을 제공하지 않습니다. 대신 각각 ODBC 드라이버와 OLE DB 공급자를 로드합니다.
System.Data.OracleClient 에는 구현 코드도 포함되어 있지만 Oracle ODBC 드라이버 및 OLE DB 공급자와 마찬가지로 설치할 Oracle 클라이언트 소프트웨어 또는 ODAC(Oracle Data Access Components) 소프트웨어도 사용합니다.
참고 항목
일반적으로 이전 드라이버가 최신 상태일 가능성이 높기 때문에 Microsoft 구현 대신 Oracle 제공 드라이버를 사용하는 것이 좋습니다. Microsoft 드라이버 구현에서 Oracle 공급자로 전환하여 문제를 해결할 수 있는 경우 기본 솔루션입니다.
기본 .NET 검색 경로
ODBC 드라이버 및 OLE DB 공급자를 로드하는 것과 달리 .NET 데이터 공급자는 레지스트리를 사용하지 않습니다. 대신 .NET 로더는 다음과 같이 설명된 검색 추론을 사용합니다.
DEVPATH환경 변수에서 공유 폴더를 확인합니다. 공유 어셈블리를 개발할 때만 사용해야 합니다. 개발이 완료되면 GAC(전역 어셈블리 캐시)에 어셈블리를 설치해야 합니다.- GAC는 어셈블리가 애플리케이션 간에 공유되는지 확인합니다. 어셈블리가 GAC에 없으면 프라이빗 어셈블리입니다.
- 애플리케이션 또는 웹 구성 파일에 항목
href이 있는 경우 특성은 어셈블리 매니페스트를 포함하는 파일의 이름과 절대 경로를 제공합니다. - 애플리케이션이 설치된 폴더가 선택되어 있습니다.
- 어셈블리의 매니페스트가 포함된 파일과 이름이 같은 애플리케이션 폴더의 하위 폴더가 선택됩니다.
- 구성 파일에 항목이 있는 경우 특성은
privatePath애플리케이션 폴더에서 검색할 하나 이상의 하위 폴더의 이름을 제공합니다.
검색 추론은 일반적인 DLL 부하 알고리즘입니다. 기본 제공 .NET 공급자를 사용하여 DLL은 거의 항상 다음 폴더 중 하나에 있습니다.
- C:\windows\microsoft.net\Framework(32비트 어셈블리)
- C:\windows\microsoft.net\Framework64(64비트 어셈블리)
이러한 폴더 아래에는 다양한 .NET 버전에 대한 폴더가 있습니다. 일반적으로 다음과 같은 경우에만 관련됩니다.
- v2.0.50727(.NET 2.0, 3.0, 3.5)
- v4.0.30319(.NET 4.x)
.NET 1.0 및 1.1 폴더를 확인할 수 있습니다. 지원되지 않으며 어셈블리를 포함하지 않습니다. .NET 3.0 및 3.5 폴더도 확인할 수 있습니다. 이러한 .NET 버전과 관련된 특정 파일이 포함될 수 있지만 버전 2.0의 모든 확장이며 확장 DLL이 아니므로 System.Data.DLL 2.0 폴더에 있습니다. 앞에서 언급한 폴더는 기본 제공 프레임워크 DLL의 위치입니다.
또한 이러한 DLL 및 타사 DLL은 검색 알고리즘이 보이는 GAC에 표시됩니다. GAC는 다음과 같습니다.
- C:\windows\assembly (.NET Framework 2.0, 3.0, 3.1, 4.x).
일부 .NET 4.0 어셈블리는 다음 아래에 있습니다.
- C:\windows\microsoft.net\assembly.
자세한 지침은 런타임에서 어셈블리를 찾는 방법을 참조 하세요. PROCMON을 사용하면 검색 경로도 표시할 수 있습니다.
타사 공급자
Analysis Services와 같은 많은 Microsoft 설치 공급자는 .NET Framework와 함께 제공되지 않습니다. 또한 독립적으로 설치되는 Oracle의 ODP 공급자와 같은 타사 .NET 공급자가 있습니다.
타사 공급자의 경우 어셈블리가 다음 폴더 중 하나에 있고 애플리케이션에 따라 64비트 또는 32비트인지 확인합니다.
- C:\windows\microsoft.net\assembly (.NET Framework 4.x 버전)
- C:\windows\assembly (.NET Framework 2.0, 3.0, 3.1, 4.x의 경우)
다음 표에서는 일부 일반 공급자의 DLL 및 어셈블리 이름을 보여 줍니다.
| 식별 이름 | 어셈블리 이름 | DLL |
|---|---|---|
| .NET Data Provider for SQL Server | System.Data.SqlClient | System.Data.DLL |
| OLE DB 공급자 | System.Data.OleDb | System.Data.DLL |
| ODBC 공급자 | System.Data.Odbc | System.Data.DLL |
| Analysis Services 공급자 | Analysis Services 공급자 | Microsoft.AnalysisServices.AdomdClientMicrosoft.AnalysisServices.AdomdClient.DLL |
| SQL CE 공급자 | System.Data.SqlServerCe | System.Data.SqlServerCe.DLL |
| Microsoft의 Oracle 공급자 | System.Data.OracleClient | System.Data.OracleClient.DLL |
| Oracle의 ODP 공급자 | Oracle.DataAccess.Client | Oracle.DataAccess.DLL |
.NET 공급자 문제를 해결할 때 애플리케이션을 독립적으로 테스트하기 위한 기본 제공 또는 일반화된 도구(예: ODBC 관리자 또는 UDL 파일)가 없습니다. 이러한 경우 원하는 언어로 빠른 테스트 애플리케이션을 작성할 수 있습니다. PowerShell로 작성된 샘플 애플리케이션은 다음과 같습니다.
#-------------------------------
#
# get-SqlAuthScheme.ps1
#
# PowerShell script to test a System.Data.SqlClient database connection
#
# USAGE: .\get-SqlAuthScheme tcp:SQLProd01.contoso.com,1433 ' explicitly specify DNS suffix, protocol, and port # ('tcp' must be lower case)
# USAGE: .\get-SqlAuthScheme SQLProd01 ' let the driver figure out the DNS suffix, protocol, and port #
#
#-------------------------------
param ([string]$server = "localhost")
Set-ExecutionPolicy Unrestricted -Scope CurrentUser
$connstr = "Server=$server;Database=master;Integrated Security=SSPI"
[System.Data.SqlClient.SqlConnection] $conn = New-Object System.Data.SqlClient.SqlConnection
$conn.ConnectionString = $connstr
[System.DateTime] $start = Get-Date
$conn.Open()
[System.Data.SqlClient.SqlCommand] $cmd = New-Object System.Data.SqlClient.SqlCommand
$cmd.CommandText = "select auth_scheme from sys.dm_exec_connections where session_id=@@spid"
$cmd.Connection = $conn
$dr = $cmd.ExecuteReader()
$result = $dr.Read()
$auth_scheme = $dr.GetString(0)
$conn.Close()
$conn.Dispose()
[System.DateTime] $end = Get-Date
[System.Timespan] $span = ($end - $start)
"End time: " + $end.ToString("M/d/yyyy HH:mm:ss.fff")
"Elapsed time was " + $span.Milliseconds + " ms."
"Auth scheme for " + $server + ": " + $auth_scheme
스크립트가 있고 C:\temp 이름이 지정된 sqlprod01서버에 대한 인증 체계를 검색하려는 경우 Windows PowerShell에서 관리자 권한으로 다음 명령을 실행합니다.
.\get-sqlauthscheme.ps1 sqlprod01
일반적으로 어셈블리/DLL이 있는 경우 .NET 공급자를 로드하는 것은 문제가 되지 않습니다. 가장 일반적인 문제는 UDL 파일을 통해 동등한 OLE DB 공급자를 사용하여 테스트할 수 있는 인증 문제입니다.
익숙하지 않은 드라이버에 대한 연결 문자열 대한 도움말은 연결 문자열 참조를 참조하세요.