none
Xml Store Procedure RRS feed

  • Pergunta

  • Viva.

    Estou a desenvolver uma aplicação que envia dados em formato XML para um Store Procedure para fazer a inserção na base de dados.

    Estou a ter problema no formato do XML.

     

    O meu store procedure é o seguinte:

     

    ALTER PROCEDURE [dbo].[PhoneBookInsert] (

    @XMLDoc NVARCHAR(4000)

    )

    AS

    DECLARE @XMLHandler int;

    EXEC sp_xml_preparedocument @XMLHandler output, @XMLDoc

    IF @@Error<>0

    BEGIN

    SELECT -1

    RETURN

    END

    BEGIN TRANSACTION

    INSERT INTO PhoneBook (

    Mobile,

    Phone,

    Fax,

    Email,

    PhoneExtension)

    SELECT

    Mobile,

    Phone,

    Fax,

    Email,

    PhoneExtension

    FROM

    OpenXML(@XMLHandler,'/items/PhoneBook')

    WITH (

    Mobile nvarchar(15) '@Mobile' ,

    Phone nvarchar(15) '@Phone',

    Fax nvarchar(15) '@Fax',

    Email nvarchar(30) '@Email',

    PhoneExtension nvarchar(5) '@PhoneExtension')

     

     

    IF @@Error<>0

    BEGIN

    ROLLBACK TRANSACTION

    SELECT -2

    RETURN

    END

    COMMIT TRANSACTION;

     

    ------------

    Quando lhe envio como parametro o XML no seguinte formato funciona perfeitamente.

    <items>

    <PhoneBook

    PhoneBookId = "0"

    Mobile = "111111111"

    Phone = "22222222"

    Fax = "33333333"

    Email = "44444"

    PhoneExtension = "555"/>

    </items>'

     

    O problema é quando na minha applicação gero o XML apartir de um Objecto (PhoneBook) e o Formato do XML que obtenho é o seguinte:

     

    <?xml version="1.0" encoding="utf-16"?>

    <Items>

    <PhoneBook">

    <PhoneBookId>0</PhoneBookId>

    <Mobile>111111111</Mobile>

    <Phone>22222222</Phone>

    <Fax>33333333</Fax>

    <Email>44444</Email>

    <PhoneExtension>555</PhoneExtension>

    </PhoneBook>

    </Items>

     

    Com o XML neste formato o meu Store Procedure não aceita.(Dá Erro)

     

    Eu vejo duas soluções para o meu problema:

     

    1ª - > Na Aplicação gerar o XML no formato Correto.

    2ª -> Modificar o Store procedure para aceitar XML segundo formato

     

    O problema é que não sei como implementar nenhuma das soluções.

     

    Assim sendo, se me poderem ajudar nestas soluções ou sugerirem outra forma de implementação, agradecia.

     

    Atencionsamente ,

     

    Rui Figueiredo

     

     

     

     

     

    quarta-feira, 18 de julho de 2007 16:50

Todas as Respostas

  • Rui,

     

    Você já tentou mudar o encondig na sua aplicação para UTF-8?

    quarta-feira, 18 de julho de 2007 16:53
  • altere o openxml para remapear apartir do seu root do xml veja o exemplo

     

     

    Declare @XMLDoc NVARCHAR(4000)
    DECLARE @XMLHandler int


    select  @XMLDoc =' <Items>
                          <PhoneBook> 
                              <PhoneBookId> 0 </PhoneBookId>
                              <Mobile>111111111</Mobile>
                              <Phone>22222222</Phone>
                              <Fax>33333333</Fax>
                              <Email>44444</Email>
                              <PhoneExtension>555</PhoneExtension>
                          </PhoneBook>
                        </Items>'


    EXEC sp_xml_preparedocument @XMLHandler output, @XMLDoc


    SELECT *
    FROM OpenXML(@XMLHandler,'/Items/PhoneBook')
    WITH (PhoneBookId nvarchar(15) './PhoneBookId',
          Mobile nvarchar(10) './Mobile' )


     


     

    Abs/

    quarta-feira, 18 de julho de 2007 17:27