Udostępnij przez


Używanie obiektów ADO z SQL Server Native klient

Aby wykorzystać nowe funkcje wprowadzone w SQL Server 2005 na przykład wiele zestawów wyników aktywne (MARS), kwerendy powiadomień, typy zdefiniowane przez użytkownika (UDTs) lub nowy XML Typ danych , istniejące aplikacje używające obiektów ActiveX Data Objects (ADO), należy użyć SQL Server Macierzysta klient OLE DB w nich dane dostępu do dostawca.

Jeśli nie chcesz użyć dowolnej z nowych funkcji wprowadzonych w SQL Server 2005, nie ma potrzeby używania SQL Server Macierzystego dostawca klient OLE DB; możesz kontynuować korzystanie z bieżących danych dostępu dostawca, który jest zwykle SQLOLEDB. Jeśli są zwiększenie istniejącej aplikacji i konieczne jest użycie nowe funkcje wprowadzone w SQL Server 2005, należy użyć SQL Server Macierzystego dostawca klient OLE DB.

Uwaga

W wypadku opracowywania nowej aplikacji zalecane jest rozważenie przy użyciu ADO.NET i .NET Framework Data dostawca dla SQL Server zamiast SQL Server Macierzysta klient w celu uzyskania dostępu do wszystkich nowych funkcji z najnowszych wersji SQL Server. Aby uzyskać więcej informacji o dostawca danych .NET Framework dla SQL Server, zapoznaj się z dokumentacją systemu .NET Framework SDK ADO.NET.

Aby włączyć obiektów ADO do używania nowych funkcji z najnowszych wersji SQL Server, wprowadzono kilka udoskonaleń SQL Server Macierzystego dostawca klient OLE DB, który rozszerza podstawowe funkcje OLE DB. Rozszerzenia te umożliwiają aplikacjom ADO za pomocą nowszej SQL Server Funkcje i zużyje dwa danych typów wprowadzone w SQL Server 2005: XML and UDT.Rozszerzenia te również wykorzystać ulepszenia varchar, nvarchar, and varbinarnym typów danych.SQL Server Macierzysta klient do dodania właściwość inicjujące SSPROP_INIT_DATATYPECOMPATIBILITY właściwość DBPROPzestaw_SQLSERVERDBINIT zestaw dla aplikacji obiektów ADO, aby nowe typy danych są dostępne w sposób zgodny z obiektów ADO.Ponadto SQL Server Macierzystego dostawca klient OLE DB definiuje również nowe kluczowe ciąg połączenia o nazwie DataTypeCompatibility oznacza to zestaw w ciągu połączenia.

Uwaga

Istniejące aplikacje ADO można uzyskać dostęp i aktualizowania XML, UDT, a tekst dużą wartość i wartości binarnych pole za pomocą dostawca SQLOLEDB i dostawca.Nowy rozmiar varchar(max), nvarchar(max), and varbinary(max) typy danych są zwracane jako typów obiektów ADO adLongVarChar, adLongVarWChar and adLongVarBinary odpowiednio.XML kolumn są zwracane jako adLongVarChari UDT kolumn są zwracane jako adVarBinary.Niemniej jednak jeśli używasz SQL Server Macierzysta klient dostawca OLE DB (SQLNCLI10) zamiast SQLOLEDB, należy upewnić się ustawić DataTypeCompatibilitysłowo kluczowe, aby "80" tak, aby nowe typy danych będą poprawnie mapowane na typy danych modelu ADO.

Włączanie klient SQL Server Native z obiektów ADO

Aby włączyć użycie SQL Server Macierzysta klient aplikacji obiektów ADO, należy zaimplementować następujące słowa kluczowe w ich ciągów połączeń:

  • Provider=SQLNCLI10

  • DataTypeCompatibility=80

Aby uzyskać więcej informacji na temat ADO połączeń ciąg słów kluczowych obsługiwane przez SQL Server Klient macierzystym, zobacz Przy użyciu słów kluczowych ciąg połączenia z SQL Server Native klient.

Oto przykład ustanowienia ciąg połączenia ADO, który jest całkowicie włączony do pracy z SQL Server Klient macierzystym, łącznie z włączeniem funkcji MARS:

Dim con As New ADODB.Connection

con.ConnectionString = "Provider=SQLNCLI10;" _
         & "Server=(local);" _
         & "Database=AdventureWorks;" _ 
         & "Integrated Security=SSPI;" _
         & "DataTypeCompatibility=80;" _
         & "MARS Connection=True;"
con.Open

Przykłady

W poniższych sekcjach przedstawiono przykłady korzystania z obiektów ADO z SQL Server Macierzystego dostawca klient OLE DB.

Pobieranie danych kolumna XML

In this example, a recordset is used to retrieve and display the data from an XML column in the SQL ServerAdventureWorks sample database.

Dim con As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim sXMLResult As String

con.ConnectionString = "Provider=SQLNCLI10;" _
         & "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

Uwaga

Filtrowanie rekordów nie jest obsługiwane w kolumnach XML.Jeśli używane, zostanie zwrócony błąd.

Pobieranie UDT kolumna danych

W tym przykładzie Polecenie obiekt jest używany do wykonywania kwerendy SQL, która zwraca UDT UDT dane są aktualizowane i następnie dodaje się nowe dane do bazy danych.W tym przykładzie założono, że Punkt UDT został już zarejestrowany w bazie danych.

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=SQLNCLI10;" _
         & "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

Włączanie i korzystanie z serwera MARS

W tym przykładzie ciąg połączenia jest konstruowana umożliwiające MARS za pośrednictwem SQL Server Do wykonać przy użyciu tego samego połączenia tworzone są macierzystego dostawca klient OLE DB i dwa obiekty zestawu rekordów.

Dim con As New ADODB.Connection

con.ConnectionString = "Provider=SQLNCLI10;" _
         & "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

We wcześniejszych wersjach dostawca OLE DB tego kodu spowodowałoby niejawna połączenie ma zostać utworzony w drugim, ponieważ tylko jeden aktywny zestaw wyniki, można go otworzyć na jedno połączenie.Ponieważ niejawna połączenie nie zostało w puli w puli połączeń OLE DB to mogłoby powodować dodatkowe obciążenie.Za pomocą funkcji MARS udostępniane przez SQL Server Macierzysta klient OLE DB, wyniki można uzyskać wiele aktywnych na jedno połączenie.