Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Para aproveitar os novos recursos introduzidos no SQL Server 2005, como vários conjuntos de resultados ativos (MARS), notificações de consulta, UDTs (tipos definidos pelo usuário) ou o novo tipo de dados xml , aplicativos existentes que usam ADO (Objetos de Dados ActiveX) devem usar o provedor OLE DB do SQL Server Native Client como seu provedor de acesso a dados.
Se você não precisar usar nenhum dos novos recursos introduzidos no SQL Server 2005, não será necessário usar o provedor OLE DB do SQL Server Native Client; você pode continuar usando seu provedor de acesso a dados atual, que normalmente é SQLOLEDB. Se você estiver aprimorando um aplicativo existente e precisar usar os novos recursos introduzidos no SQL Server 2005, deverá usar o provedor OLE DB do SQL Server Native Client.
Observação
Se você estiver desenvolvendo um novo aplicativo, é recomendável que você considere usar ADO.NET e o Provedor de Dados do .NET Framework para SQL Server em vez do SQL Server Native Client para acessar todos os novos recursos das versões recentes do SQL Server. Para obter mais informações sobre o Provedor de Dados do .NET Framework para SQL Server, consulte a documentação do SDK do .NET Framework para ADO.NET.
Para permitir que o ADO use novos recursos de versões recentes do SQL Server, alguns aprimoramentos foram feitos no provedor OLE DB do SQL Server Native Client, que estende os principais recursos do OLE DB. Esses aprimoramentos permitem que aplicativos ADO usem recursos mais recentes do SQL Server e consumam dois tipos de dados introduzidos no SQL Server 2005: xml e udt. Esses aprimoramentos também exploram aprimoramentos nos tipos de dados varchar, nvarchar e varbinary . O SQL Server Native Client adiciona a propriedade de inicialização SSPROP_INIT_DATATYPECOMPATIBILITY à propriedade DBPROPSET_SQLSERVERDBINIT definida para uso por aplicativos ADO para que os novos tipos de dados sejam expostos de forma compatível com o ADO. Além disso, o provedor OLE DB do SQL Server Native Client também define uma nova palavra-chave de cadeia de conexão chamada DataTypeCompatibility que é definida na cadeia de conexão.
Observação
Os aplicativos ADO existentes podem acessar e atualizar valores de campo XML, UDT e de grande valor e de texto binário usando o provedor SQLOLEDB. Os novos tipos de dados varchar(max), nvarchar(max)e varbinary(max) são retornados como os tipos ADO adLongVarChar, adLongVarWChar e adLongVarBinary , respectivamente. As colunas XML são retornadas como adLongVarChar e as colunas UDT são retornadas como adVarBinary. No entanto, se você usar o provedor OLE DB do SQL Server Native Client (SQLNCLI11) em vez de SQLOLEDB, será necessário definir a DataTypeCompatibility palavra-chave como "80" para que os novos tipos de dados sejam mapeados corretamente para os tipos de dados do ADO.
Habilitando o SQL Server Native Client do ADO
Para habilitar o uso do SQL Server Native Client, os aplicativos ADO precisarão implementar as seguintes palavras-chave em suas cadeias de conexão:
Provider=SQLNCLI11DataTypeCompatibility=80
Para obter mais informações sobre as palavras-chave de cadeia de conexões do ADO com suporte no SQL Server Native Client, consulte Usando palavras-chave de cadeia de conexão com o SQL Server Native Client.
Veja a seguir um exemplo de como estabelecer uma cadeia de conexão do ADO totalmente habilitada para trabalhar com o SQL Server Native Client, incluindo a habilitação do recurso 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
Exemplos
As seções a seguir fornecem exemplos de como você pode usar o ADO com o provedor OLE DB do SQL Server Native Client.
Recuperando dados de coluna XML
Neste exemplo, um conjunto de registros é usado para recuperar e exibir os dados de uma coluna XML no banco de dados de exemplo adventureworks do SQL Server.
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
Observação
Não há suporte para filtragem de conjunto de registros com colunas XML. Se usado, um erro será retornado.
Recuperando dados da coluna UDT
Neste exemplo, um objeto Command é usado para executar uma consulta SQL que retorna um UDT, os dados UDT são atualizados e, em seguida, os novos dados são inseridos novamente no banco de dados. Este exemplo pressupõe que o UDT de Ponto já foi registrado no banco de dados.
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
Habilitar e usar o MARS
Neste exemplo, a cadeia de conexão é construída para habilitar o MARS por meio do provedor OLE DB do SQL Server Native Client e, em seguida, dois objetos de conjunto de registros são criados para executar usando a mesma conexão.
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
Em versões anteriores do provedor OLE DB, esse código faria com que uma conexão implícita fosse criada na segunda execução porque apenas um conjunto ativo de resultados poderia ser aberto por uma única conexão. Como a conexão implícita não foi agrupada no pool de conexões OLE DB, isso causaria sobrecarga adicional. Com o recurso MARS exposto pelo provedor OLE DB do SQL Server Native Client, você obtém vários resultados ativos em uma conexão.