SQL Server Native Client에서 ADO 사용
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)
Important
SNAC(SQL Server Native Client)는 다음과 함께 제공되지 않습니다.
- SQL Server 2022(16.x) 이상 버전
- SQL Server Management Studio 19 이상 버전
SQL Server Native Client(SQLNCLI 또는 SQLNCLI11)와 레거시 Microsoft OLE DB Provider for SQL Server(SQLOLEDB)는 새로운 응용 프로그램 개발에 권장되지 않습니다.
새 프로젝트의 경우 다음 드라이버 중 하나를 사용합니다.
SQL Server 데이터베이스 엔진(버전 2012부터 2019까지)의 구성 요소로 제공되는 SQLNCLI의 경우 이 수명 주기 예외 지원을 참조하세요.
MARS(다중 활성 결과 집합), 쿼리 알림, UDT(사용자 정의 형식) 또는 새 xml 데이터 형식과 같은 SQL Server 2005(9.x)에 도입된 새로운 기능을 활용하려면 ADO(ActiveX Data Objects)를 사용하는 기존 애플리케이션에서 SQL Server Native Client OLE DB 공급자를 데이터 액세스 공급자로 사용해야 합니다.
SQL Server 2005(9.x)에 도입된 새로운 기능을 사용할 필요가 없는 경우 SQL Server Native Client OLE DB 공급자를 사용할 필요가 없습니다. 일반적으로 SQLOLEDB인 현재 데이터 액세스 공급자를 계속 사용할 수 있습니다. 기존 애플리케이션을 향상시키고 SQL Server 2005(9.x)에 도입된 새로운 기능을 사용해야 하는 경우 SQL Server Native Client OLE DB 공급자를 사용해야 합니다.
참고 항목
새 애플리케이션을 개발하는 경우 SQL Server Native Client 대신 ADO.NET 및 .NET Framework Data Provider for SQL Server를 사용하여 최신 버전의 SQL Server의 모든 새로운 기능에 액세스하는 것이 좋습니다. .NET Framework Data Provider for SQL Server에 대한 자세한 내용은 ADO.NET .NET Framework SDK 설명서를 참조하세요.
ADO가 최신 버전의 SQL Server의 새로운 기능을 사용할 수 있도록 OLE DB의 핵심 기능을 확장하는 SQL Server Native Client OLE DB 공급자에 대한 몇 가지 향상된 기능이 제공되었습니다. 이러한 향상된 기능을 통해 ADO 애플리케이션은 최신 SQL Server 기능을 사용하고 SQL Server 2005(9.x) 에 도입된 두 가지 데이터 형식인 xml 및 udt를 사용할 수 있습니다. 또한 개선된 varchar, nvarchar 및 varbinary 데이터 형식도 활용할 수 있습니다. SQL Server Native Client는 ADO 애플리케이션에서 사용할 DBPROPSET_SQLSERVERDBINIT 속성 집합에 SSPROP_INIT_DATATYPECOMPATIBILITY 초기화 속성을 추가하여 새 데이터 형식이 ADO와 호환되는 방식으로 노출되도록 합니다. 또한 SQL Server Native Client OLE DB 공급자는 연결 문자열 설정된 DataTypeCompatibility라는 새 연결 문자열 키워드를 정의합니다.
참고 항목
기존 ADO 애플리케이션은 SQLOLEDB 공급자를 사용하여 XML, UDT 및 큰 값 텍스트 및 이진 필드 값에 액세스하고 업데이트할 수 있습니다. 새로운 더 큰 varchar(max), nvarchar(max) 및 varbinary(max) 데이터 형식은 각각 ADO 형식 adLongVarChar, adLongVarWChar 및 adLongVarBinary로 반환됩니다. XML 열은 adLongVarChar로 반환되고 UDT 열은 adVarBinary로 반환됩니다. 그러나 SQLOLEDB 대신 SQL Server Native Client OLE DB 공급자(SQLNCLI11)를 사용하는 경우 새 데이터 형식이 ADO 데이터 형식에 올바르게 매핑되도록 DataTypeCompatibility 키워드를 "80"으로 설정해야 합니다.
ADO에서 SQL Server Native Client 사용
SQL Server Native Client를 사용하도록 설정하려면 ADO 애플리케이션이 연결 문자열 다음 키워드를 구현해야 합니다.
Provider=SQLNCLI11
DataTypeCompatibility=80
SQL Server Native Client에서 지원되는 ADO 연결 문자열 키워드에 대한 자세한 내용은 SQL Server Native Client에서 연결 문자열 키워드 사용을 참조 하세요.
다음은 MARS 기능의 활성화를 포함하여 SQL Server Native Client에서 작동하도록 완전히 사용하도록 설정된 ADO 연결 문자열 설정하는 예제입니다.
Dim con As New ADODB.Connection
con.ConnectionString = "Provider=SQLNCLI11;" _
& "Server=(local);" _
& "Database=AdventureWorks;" _
& "Integrated Security=SSPI;" _
& "DataTypeCompatibility=80;" _
& "MARS Connection=True;"
con.Open
예제
다음 섹션에서는 SQL Server Native Client OLE DB 공급자와 함께 ADO를 사용하는 방법에 대한 예제를 제공합니다.
XML 열 데이터 검색
이 예제에서는 레코드 집합을 사용하여 SQL Server AdventureWorks 샘플 데이터베이스의 XML 열에서 데이터를 검색하고 표시합니다 .
Dim con As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim sXMLResult As String
con.ConnectionString = "Provider=SQLNCLI11;" _
& "Server=(local);" _
& "Database=AdventureWorks;" _
& "Integrated Security=SSPI;" _
& "DataTypeCompatibility=80;"
con.Open
' Get the xml data as a recordset.
Set rst.ActiveConnection = con
rst.Source = "SELECT AdditionalContactInfo FROM Person.Contact " _
& "WHERE AdditionalContactInfo IS NOT NULL"
rst.Open
' Display the data in the recordset.
While (Not rst.EOF)
sXMLResult = rst.Fields("AdditionalContactInfo").Value
Debug.Print (sXMLResult)
rst.MoveNext
End While
con.Close
Set con = Nothing
참고 항목
레코드 집합 필터링은 XML 열에서 지원되지 않습니다. 사용하는 경우 오류가 반환됩니다.
UDT 열 데이터 검색
이 예제 에서는 Command 개체를 사용하여 UDT를 반환하는 SQL 쿼리를 실행하고, UDT 데이터가 업데이트된 다음, 새 데이터가 데이터베이스에 다시 삽입됩니다. 이 예제에서는 Point UDT가 데이터베이스에 이미 등록되어 있다고 가정합니다.
Dim con As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rst As New ADODB.Recordset
Dim strOldUDT As String
Dim strNewUDT As String
Dim aryTempUDT() As String
Dim strTempID As String
Dim i As Integer
con.ConnectionString = "Provider=SQLNCLI11;" _
& "Server=(local);" _
& "Database=AdventureWorks;" _
& "Integrated Security=SSPI;" _
& "DataTypeCompatibility=80;"
con.Open
' Get the UDT value.
Set cmd.ActiveConnection = con
cmd.CommandText = "SELECT ID, Pnt FROM dbo.Points.ToString()"
Set rst = cmd.Execute
strTempID = rst.Fields(0).Value
strOldUDT = rst.Fields(1).Value
' Do something with the UDT by adding i to each point.
arytempUDT = Split(strOldUDT, ",")
i = 3
strNewUDT = LTrim(Str(Int(aryTempUDT(0)) + i)) + "," + _
LTrim(Str(Int(aryTempUDT(1)) + i))
' Insert the new value back into the database.
cmd.CommandText = "UPDATE dbo.Points SET Pnt = '" + strNewUDT + _
"' WHERE ID = '" + strTempID + "'"
cmd.Execute
con.Close
Set con = Nothing
MARS 사용 및 사용
이 예제에서는 SQL Server Native Client OLE DB 공급자를 통해 MARS를 사용하도록 연결 문자열 생성된 다음 동일한 연결을 사용하여 실행하기 위해 두 개의 레코드 집합 개체를 만듭니다.
Dim con As New ADODB.Connection
con.ConnectionString = "Provider=SQLNCLI11;" _
& "Server=(local);" _
& "Database=AdventureWorks;" _
& "Integrated Security=SSPI;" _
& "DataTypeCompatibility=80;" _
& "MARS Connection=True;"
con.Open
Dim recordset1 As New ADODB.Recordset
Dim recordset2 As New ADODB.Recordset
Dim recordsaffected As Integer
Set recordset1 = con.Execute("SELECT * FROM Table1", recordsaffected, adCmdText)
Set recordset2 = con.Execute("SELECT * FROM Table2", recordsaffected, adCmdText)
con.Close
Set con = Nothing
이전 버전의 OLE DB 공급자에서 이 코드는 단일 연결당 하나의 활성 결과 집합만 열 수 있으므로 두 번째 실행 시 암시적 연결을 만듭니다. 암시적 연결이 OLE DB 연결 풀에 풀되지 않았기 때문에 추가 오버헤드가 발생합니다. SQL Server Native Client OLE DB 공급자가 노출하는 MARS 기능을 사용하면 하나의 연결에서 여러 활성 결과를 얻을 수 있습니다.