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 tem aprimoramentos adicionais para dar suporte aos novos tipos de dados 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 para 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 do SQL Server 2008, o SQLXML 4.0 era liberado com o SQL Server e fazia parte da instalação padrão de todas as versões do SQL Server com exceção do SQL Server Express. A partir do SQL Server 2008, a última versão do SQLXML (SQLXML 4.0 SP1) não está mais incluída no SQL Server. Para instalar o SQLXML 4.0 SP1 quando disponível, baixe-o no Local de instalação do SQLXML.

Os arquivos do SQLXML 4.0 SP1 são instalados no seguinte local:

%PROGRAMFILES%\SQLXML 4.0\

ObservaçãoObservaçã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 SQL Server 2008.

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 o 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 para os provedores SQLOLEDB e SQL Server Native Client. É recomendado usar a mesma versão do provedor SQL Server Native Client e do SQL Server porque o SQL Server Native Client foi desenvolvido para dar suporte a qualquer tipo de dados novo fornecido no servidor, como os tipos de dados Date, Time, DateTime2 e dateTimeOffset no e compatíveis com o SQL Server 2008 Native Client.

O 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).

O SQL Server Native Client pode ser usado para criar novos aplicativos ou aprimorar os aplicativos existentes que precisam aproveitar os recursos introduzidos no SQL Server que não são suportados pelo SQLOLEDB e SQLODBC no MDAC e Microsoft Windows. Por exemplo, SQL Server Native Client é necessário para os recursos SQLXML do lado do cliente, como FOR XML, para usar o tipo de dados xml. Para obter mais informações, consulte Formatação XML do lado do cliente (SQLXML 4.0), Usando o ADO para executar consultas do SQLXML 4.0 e Programação do SQL Server 2008 Native Client.

ObservaçãoObservaçã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

O SQL Server 2005 introduziu o tipo de dados xml e o SQLXML 4.0 dá suporte ao tipo de dados xml. Para obter mais informações, consulte xml Data Type Support in 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.

O SQL Server 2008 introduziu os tipos de dados Date, Time, DateTime2 e DateTimeOffset. O SQLXML 4.0 SP1 habilitará esses quatro novos tipos de dados como tipos escalares internos quando usados com o SQL Server 2008 Native Client OLE DB Provider (SQLNCLI10) que é fornecido com o SQL Server 2008.

Alterações no XML Bulk Load para o SQLXML 4.0 SP1

  • Para SQLXML 4.0, o campo de estouro SchemaGen é criado com o tipo de dados xml. Para obter mais informações, consulte SQL Server XML Bulk Load Object Model.

  • Se você tiver criado anteriormente aplicativos do Microsoft Visual Basic e deseja usar o SQLXML 4.0, deverá recompilar o aplicativo com referência à 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çãoObservaçã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 erros nativos fornecidas pelo OLE DB e SQL Server em vez de um erro SQLXML de nível superior (como nas 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 quiser que o valor GUID seja retornado com os colchetes (por exemplo, {some GUID}), o valor dessa chave de 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 &#x09;. This is a line feed and CR &#x0D;&#x0A; 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 &#x0D;
     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 do SQLXML 4.0.

Suporte para SQLXML 3.0 ISAPI e tipos de dados introduzidos no SQL Server 2005

Pelo fato de o suporte a ISAPI ter sido removido do SQLXML 4.0, se sua solução necessita dos recursos avançados de digitação de dados introduzidos no SQL Server 2005 como o tipo de dados xml ou UDTs (user-defined data types) e acesso baseado na Web, você precisará usar outra solução, como classes gerenciadas SQLXML ou outro tipo de manipulador HTTP, como o XML Web Services nativos para SQL Server 2005.

Como alternativa, se você não exigir essas extensões de tipo, poderá continuar usando o SQLXML 3.0 para se conectar a instalações do SQL Server 2005 e SQL Server 2008. O suporte a SQLXML 3.0 ISAPI funcionará nessas versões mais recentes, mas não suporta nem reconhece o tipo de dados xml ou o suporte a tipos de dados UDT introduzido no SQL Server 2005.

Alterações de segurança do XML Bulk Load para arquivos temporários

Para o SQLXML 4.0 e SQL Server 2005 ou SQL Server 2008, são concedidas permissões de arquivo do XML Bulk Load 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 às alterações no mecanismo de execução, SQL Server 2005 e SQL Server 2008 poderiam retornar valores diferentes nos metadados para uma tabela base em comparação aos valores retornados 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 (SQLNCLI10) for especificado como o provedor, os dados serão retornados como XML.