Udostępnij za pośrednictwem


Przy użyciu programu SQL Server Native Client ADO

Aby wykorzystać nowe funkcje wprowadzone w SQL Server 2005 takie jak wiele zestawów wyników active (MARS), kwerendy powiadomień, typy zdefiniowane przez użytkownika (UDTs) lub nowy xml typ danych, należy użyć istniejących aplikacji, które używają obiektów ActiveX Data Objects (ADO) SQL Server macierzystego klienta dostawca OLE DB jako ich dane dostępu dostawca.

Jeśli nie trzeba używać żadnego nowe funkcje wprowadzone w SQL Server 2005, nie ma potrzeby używania SQL Server macierzystego klienta dostawca OLE DB; Możesz kontynuować korzystanie z bieżącego dostępu dostawca danych, który jest zwykle SQLOLEDB.Jeśli są wzmocnienia istniejących aplikacji i trzeba użyć nowe funkcje wprowadzone w SQL Server 2005, należy użyć SQL Server macierzystego klienta OLE DB dostawca.

Ostrzeżenie

Jeśli tworzysz nową aplikację, zaleca się rozważyć korzystanie z obiektów ADO.NET i.NET Framework Data Provider dla SQL Server zamiast SQL Server Native Client nowe funkcje w najnowszych wersjach dostępu do SQL Server.Aby uzyskać więcej informacji.NET Framework Data Provider dla SQL Server, zobacz.NET Framework SDK dokumentacji ADO.NET.

Włączyć ADO, aby nowe funkcje najnowszych wersjach SQL Server, wprowadzono kilka udoskonaleń SQL Server macierzystego klienta dostawca OLE DB który rozszerza podstawowe funkcje OLE DB.Rozszerzenia te umożliwiają aplikacjom ADO użyj nowszej SQL Server Funkcje i zużyje danych dwóch typów wprowadzonych w SQL Server 2005: xml and udt.Rozszerzenia te również wykorzystać ulepszenia varchar, nvarchar, i varbinary typów danych.SQL ServerNative Client dodaje właściwość inicjowania SSPROP_INIT_DATATYPECOMPATIBILITY do DBPROPzestawwłaściwość _SQLSERVERDBINIT zestaw dla aplikacji ADO, aby nowe typy danych są udostępniane w sposób zgodny z obiektów ADO.Ponadto SQL Server macierzystego klienta dostawca OLE DB definiuje również nowe połączenie ciąg słowa kluczowego o nazwie DataTypeCompatibility w połączenie ustawiono ciąg.

Ostrzeżenie

Istniejące aplikacje ADO można uzyskać dostęp i aktualizować XML, UDT, a tekst dużą wartość i wartości pole binarnych przy użyciu dostawca SQLOLEDB.Nowe większych varchar(max), nvarchar(max), i varbinary(max) typy danych są zwracane jako typów ADO adLongVarChar, adLongVarWChar i adLongVarBinary odpowiednio.XML kolumn są zwracane jako adLongVarChar, i UDT kolumn są zwracane jako adVarBinary.Jednakże jeśli używasz SQL Server macierzystego klienta dostawca OLE DB (SQLNCLI10) zamiast SQLOLEDB, trzeba upewnij się, że zestaw DataTypeCompatibility słowo kluczowe, aby "80" tak, aby nowe typy danych są poprawnie mapowane na typy danych ADO.

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

Aby włączyć użycie SQL Server Native Client aplikacje ADO, należy zaimplementować następujące słowa kluczowe w ich ciągi połączeń:

  • Provider=SQLNCLI10

  • DataTypeCompatibility=80

Aby uzyskać więcej informacji na temat obiektów ADO połączeń ciąg słów kluczowych obsługiwane w SQL Server Native Client, zobacz Słowa kluczowe ciąg połączenia przy użyciu programu SQL Server Native Client.

Oto przykład ustanawiania połączenia ADO ciąg , jest całkowicie włączony do pracy z SQL Server Native Client, w tym włączenie funkcji MARS:

Dim con As New ADODB.Connection

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

Przykłady

W poniższych sekcjach przedstawiono przykłady użycia obiektów ADO z SQL Server macierzystego klienta OLE DB dostawca.

Pobieranie danych XML w kolumnie

W tym przykładzie zestaw rekordów jest używany do pobierania i wyświetlić dane z kolumna XML AdventureWorks2008R2 przykładowej bazy danych.

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

con.ConnectionString = "Provider=SQLNCLI10;" _
         & "Server=(local);" _
         & "Database=AdventureWorks2008R2;" _ 
         & "Integrated Security=SSPI;" _ 
         & "DataTypeCompatibility=80;"

con.Open

' Get the xml data as a recordset.
Set rst.ActiveConnection = con
rst.Source = "SELECT AdditionalContactInfo FROM Person.Person " _
   & "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

Ostrzeżenie

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

Pobieranie danych kolumny UDT

W tym przykładzie polecenia obiektu jest używane do wykonać kwerendy SQL, która zwraca typ zdefiniowany przez użytkownika, aktualizowanie danych UDT i następnie dodaje się nowe dane do bazy danych.W tym przykładzie założono, że punkt UDT została już zarejestrowana 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=AdventureWorks2008R2;" _ 
         & "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łączenie i używanie MARS

W tym przykładzie połączenie ciąg jest skonstruowane w celu umożliwienia MARS poprzez SQL Server macierzystego klienta dostawca OLE DB, a dwa obiekty recordset są tworzone do wykonać przy użyciu tego samego połączenia.

Dim con As New ADODB.Connection

con.ConnectionString = "Provider=SQLNCLI10;" _
         & "Server=(local);" _
         & "Database=AdventureWorks2008R2;" _ 
         & "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

W starszych wersjach dostawca OLE DB tego kodu spowodowałoby niejawna połączenia utworzone przy drugim wykonaniu, ponieważ tylko jeden aktywny zestaw wyniki można otworzyć na jedno połączenie.Ponieważ niejawna połączenie nie zostało puli w puli połączeń OLE DB spowodowałoby to dodatkowe obciążenie.Funkcja MARS udostępniane przez SQL Server macierzystego klienta dostawca OLE DB, uzyskać wiele wyniki aktywnego na jedno połączenie.