Novidades no SQLXML 4.0 SP1
O Microsoft SQLXML 4.0 SP1 inclui várias atualizações e aprimoramentos. Este tópico resume as atualizações e fornece links a informações mais detalhadas. O SQLXML 4.0 SP1 fornece aprimoramentos adicionais para dar suporte aos novos tipos de dados introduzidos no SQL Server 2008. Este tópico abrange os seguintes assuntos:
Instalação do SQLXML 4.0 SP1
Problemas da instalação lado a lado
SQLXML 4.0 e MSXML
Redistribuição do SQLXML 4.0
Suporte para SQL Server Native Client
Suporte a tipos de dados introduzidos no SQL Server 2005
Alterações no XML Bulk Load para o SQLXML 4.0
Alterações de chave de registro para o SQLXML 4.0
Problemas de migração
Instalação do SQLXML 4.0 SP1
Antes SQL Server 2008, o SQLXML 4.0 era lançado com SQL Server e fazia parte da instalação padrão de todas as versões do SQL Server, exceto SQL Server Express. A partir do SQL Server 2008, a versão mais recente do SQLXML (SQLXML 4.0 SP1) não está mais incluída no SQL Server. Para instalar o SQLXML 4.0 SP1, baixe-o em Local de Instalação para SQLXML 4.0 SP1.
Os arquivos do SQLXML 4.0 SP1 são instalados no seguinte local:
%PROGRAMFILES%\SQLXML 4.0\
Observação
Todas as configurações adequadas de registro são feitas para o SQLXML 4.0 como parte do processo de instalação.
Para permitir que os aplicativos SQLXML de 32 bits sejam executados no Windows on Windows (WOW64) em sistemas operacionais Windows de 64 bits, execute o pacote SQLXML 4.0 SP1 de 64 bits, chamado sqlxml4.msi, que está disponível no Centro de download.
Desinstalação do SQLXML 4.0 SP1
Existem chaves de registro compartilhadas entre o SQLXML 3.0 SP3, o SQLXML 4.0 e o SQLXML 4.0 SP1. Se as versões posteriores do SQLXML forem desinstaladas no mesmo computador que contém o SQLXML 3.0 SP3, talvez seja necessário reinstalar o SQLXML 3.0 SP3.
Problemas da instalação lado a lado
O processo de instalação para SQLXML 4.0 não remove os arquivos que foram instalados pelas versões anteriores do SQLXML. Portanto, você pode ter DLLs para várias instalações de versões diferentes do SQLXML em seu computador. É possível executar as instalações lado a lado. O SQLXML 4.0 inclui tanto ProgIDs dependentes de versão como independentes de versão. Todos os aplicativos de produção devem usar PROGIDs dependentes de versão.
SQLXML 4.0 SP1 e MSXML
O SQLXML 4.0 não instala o MSXML. O SQLXML 4.0 usa o MSXML 6.0, que é instalado como parte da instalação do SQL Server 2005 ou posterior.
Redistribuição do SQLXML 4.0 SP1
É possível distribuir o SQLXML 4.0 SP1 usando o pacote do instalador redistribuível. Uma maneira de instalar vários pacotes em um processo que, para o usuário, parece ser uma única instalação é usar a tecnologia de encadeador e bootstrapper. Para obter mais informações, consulte as seções sobre Criação de um pacote de bootstrapper personalizado para o Visual Studio 2005 e Adição de pré-requisitos personalizados.
Se o aplicativo foi projetado para uma plataforma diferente daquela em que foi desenvolvido, você poderá baixar as versões do sqlncli.msi para x64, Itanium e x86 do Centro de Download da Microsoft.
Também há programas de instalação de redistribuição separados o MSXML 6.0 (msxml6.msi). Eles podem ser encontrados no CD de instalação do SQL Server no seguinte local:
%CD%\Setup\
Esses arquivos de instalação podem ser usados para instalar o MSXML 6.0 diretamente do CD. Eles também podem ser usados, de forma independente, para redistribuir o MSXML 6.0 junto com o SQLXML 4.0 SP1 com seus próprios aplicativos personalizados.
Você também precisará redistribuir SQL Server Native Client se estiver usando-o como o provedor de dados com seu aplicativo. Para obter mais informações, consulte Instalando o SQL Server Native Client.
Suporte para SQL Server Native Client
O SQLXML 4.0 dá suporte aos provedores SQLOLEDB e SQL Server Native Client. É recomendável que você use a mesma versão do provedor de SQL Server Native Client e SQL Server porque SQL Server Native Client é desenvolvido para dar suporte a novos tipos de dados fornecidos no servidor, como os Date, Time
tipos de dados , DateTime2
e dateTimeOffset
no SQL Server 2008 e com suporte do SQL Server 2014 Native Client.
SQL Server Native Client é uma tecnologia de acesso a dados introduzida no SQL Server 2005. Ela reúne o provedor SQLOLEDB e o driver SQLODBC em uma única DLL (dynamic link library) nativa fornecendo, ao mesmo tempo, uma nova funcionalidade separada e diferente do MDAC (Microsoft Data Access Components).
SQL Server Native Client pode ser usado para criar novos aplicativos ou aprimorar aplicativos existentes que precisam aproveitar os recursos introduzidos no SQL Server que não têm suporte do SQLOLEDB e do SQLODBC no MDAC e no Microsoft Windows. Por exemplo, SQL Server Native Client é necessário para que recursos SQLXML do lado do cliente, como FOR XML, usem o xml
tipo de dados . Para obter mais informações, consulte Formatação XML do lado do cliente (SQLXML 4.0),Usando o ADO para executar consultas SQLXML 4.0 e Programação SQL Server Native Client.
Observação
O SQLXML 4.0 não é totalmente compatível com o SQLXML 3.0. Pelo fato de haver algumas correções de bug e outras alterações funcionais, particularmente a remoção do suporte a SQLXML ISAPI, você não pode usar diretórios virtuais IIS com o SQLXML 4.0. Embora a maioria dos aplicativos será executada com pequenas modificações, você deve testá-los antes de os colocar em produção com o SQLXML 4.0.
Suporte para tipos de dados introduzidos no SQL Server 2005 e no SQL Server 2008
SQL Server 2005 introduziu o xml
tipo de dados e o SQLXML 4.0 dá suporte ao xml
tipo de dados. Para obter mais informações, consulte Suporte a tipo de dados xml no SQLXML 4.0.
Para obter exemplos de como usar o tipo de dados xml
no SQLXML durante o mapeamento de exibições XML, o carregamento em massa de dados XML ou a execução de diagramas de atualização XML, consulte os exemplos fornecidos nos tópicos a seguir.
SQL Server 2008 introduziu os Date, Time
tipos de dados , DateTime2
e DateTimeOffset. O SQLXML 4.0 SP1 habilitará esses quatro novos tipos de dados como tipos escalares internos quando usados com SQL Server Provedor OLE DB do Native Client 2014 (SQLNCLI11), que é fornecido no SQL Server 2014.
Alterações no XML Bulk Load para o SQLXML 4.0 SP1
Para SQLXML 4.0, o campo de estouro SchemaGen é criado usando o
xml
tipo de dados . Para obter mais informações, consulte SQL Server modelo de objeto de carregamento em massa XML.Se você já criou aplicativos do Microsoft Visual Basic e deseja usar o SQLXML 4.0, recompile o aplicativo com referência a Xblkld4.dll.
No caso dos aplicativos do Visual Basic Scripting Edition, você deve registrar a DLL que deseja usar. No seguinte exemplo, se você especificar os ProgIDs independentes de versão, o aplicativo dependerá da última DLL registrada:
set objBulkLoad = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad")
Observação
O PROGID dependente de versão é o SQLXMLBulkLoad.SQLXMLBulkLoad.4.0.
Alterações de chave de registro para o SQLXML 4.0
No SQLXML 4.0, as chaves de registro foram alteradas em relação às versões anteriores no seguinte:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SQLXML4\TemplateCacheSize
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SQLXML4\SchemaCacheSize
Você deve alterar as configurações se quiser que essas chaves entrem em vigor no SQLXML 4.0.
Além disso, o SQLXML 4.0 introduz as seguintes chaves de registro:
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\ReportErrorsWithSQLInfo
Por padrão, o SQLXML 4.0 retorna informações de erro nativas fornecidas pelo OLE DB e SQL Server em vez de um erro SQLXML de alto nível (como foi o caso em versões anteriores do SQLXML). Se você não quiser esse comportamento, o valor desta chave de registro de tipo Dword deverá ser definido como 0 (o padrão é 1).
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\FORXML_GenerateGUIDBraces
Por padrão, o SQLXML retorna valores GUID do SQL Server sem os colchetes. Se você quiser que o valor guid seja retornado com as chaves (por exemplo, {algum GUID}), o valor dessa chave do Registro deverá ser definido como 1 (o padrão é 0).
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\SQL2000CompatMode
Por padrão, quando o analisador XML carrega os dados, os espaços em branco são normalizados de acordo com as regras do XML 1.0. Isso resulta na perda de alguns dos caracteres com espaço em branco em seus dados. Assim, a representação textual de seus dados pode não ser a mesma depois da análise, embora os dados sejam semanticamente os mesmos.
Essa chave é introduzida para que você possa escolher manter os caracteres com espaço em branco nos dados. Se você adicionar essa chave de registro e definir seu valor como 0, os caracteres com espaço em branco (LF, CR e tab) no XML serão retornados codificados em caso de valores de atributo. No caso de valores de elemento, somente CR é retornado codificado.
Por exemplo:
CREATE TABLE T( Col1 int, Col2 nvarchar(100)); GO -- Insert data with tab, line feed and carriage return). INSERT INTO T VALUES (1, 'This is a tab . This is a line feed and CR more text'); GO -- Test this query (without the registry key). SELECT * FROM T FOR XML AUTO; -- This is the result (no encoding of special characters). <?xml version="1.0" encoding="utf-8" ?> <r> <T Col1="1" Col2="This is a tab . This is a line feed and CR more text"/> </r> -- Now add registry key with value 0 and execute the query again. -- Note the encoding for carriage return, line-feed and tab in the attribute value. <?xml version="1.0" encoding="utf-8" ?> <r> <T Col1="1" Col2="This is a tab . This is a line feed and CR more text"/> </r> -- Update the query and specify ELEMENTS directive SELECT * FROM T FOR XML AUTO, ELEMENTS -- Only the carriage return is returned encoded. <?xml version="1.0" encoding="utf-8" ?> <r> <T> <Col1>1</Col1> <Col2>This is a tab . This is a line feed and CR more text</Col2> </T> </r>
Problemas de migração
A seguir, são citadas algumas questões que poderiam impactar a migração de seus aplicativos SQLXML herdados para o SQLXML 4.0.
Consultas ADO e SQLXML 4.0
Nas versões anteriores do SQLXML, havia suporte para a execução de consultas baseadas em URL usando diretórios virtuais IIS e o filtro ISAPI SQLXML. Para aplicativos que usam SQLXML 4.0, este suporte não está mais disponível.
Em vez disso, as consultas, modelos e diagramas de atualização SQLXML podem ser executados com as extensões SQLXML para ADO (ActiveX Data Objects) introduzidas pela primeira vez no MDAC (Microsoft Data Access Components) 2.6 e versão posterior.
Para obter mais informações, consulte Usando o ADO para executar consultas SQLXML 4.0.
Suporte para SQLXML 3.0 ISAPI e tipos de dados introduzidos no SQL Server 2005
Como o suporte a ISAPI foi removido do SQLXML 4.0, se sua solução exigir os recursos avançados de digitação de dados introduzidos no SQL Server 2005, como o tipo de dados xml ou UDTs (tipos de dados definidos pelo usuário) e o acesso baseado na Web, você precisará usar outra solução, como classes gerenciadas por SQLXML ou outro tipo de manipulador HTTP, como Serviços Web XML Nativos para SQL Server 2005.
Como alternativa, se você não precisar dessas extensões de tipo, poderá continuar a usar o SQLXML 3.0 para se conectar às instalações SQL Server 2005 e SQL Server 2008. O suporte a ISAPI do SQLXML 3.0 funcionará nessas versões posteriores, mas não dá suporte ou reconhece o tipo de dados ou o xml
suporte ao tipo UDT introduzido no SQL Server 2005.
Alterações de segurança do XML Bulk Load para arquivos temporários
Para SQLXML 4.0 e SQL Server, as permissões de arquivo de carregamento em massa XML são concedidas ao usuário que executa a operação de carregamento em massa. As permissões de leitura e gravação são herdadas do sistema de arquivos. Nas versões anteriores do SQLXML e SQL Server, o XML Bulk Load em SQLXML criava arquivos temporários que não eram seguros e que podiam ser lidos por qualquer pessoa.
Problemas de migração para FOR XML do lado do cliente
Devido a alterações no mecanismo de execução, SQL Server pode retornar valores diferentes nos metadados de uma tabela base do que seria retornado se a consulta FOR XML fosse executada em SQL Server 2000. Nesses casos, a formatação no lado do cliente dos resultados de consulta FOR XML terá uma saída diferente dependendo da versão em que a consulta estiver sendo executada.
Se uma consulta FOR XML for executada no lado do cliente com SQLXML 3.0 em uma coluna de tipo de dados xml
, os dados resultantes serão retornados como uma cadeia de caracteres com entidade completa criada. No SQLXML 4.0, se o SQL Server Native Client (SQLNCLI11) for especificado como o provedor, os dados serão retornados como XML.