none
Inserir dados do XML no Banco de dados RRS feed

  • Pergunta

  • Olá.

    Eu tenho um arquivo aspx com dados no formato xml.
    Preciso pegar estes dados e inserir na tabela do banco, como faço isso?
    Desde já agradeço a atenção.
    quinta-feira, 27 de novembro de 2008 21:00

Respostas

  • Olá Lucas,

     

    Como está a estrutura do seu xml?

     

    Veja um exemplo com mais campos:

     

    Arquivo XML:

    Code Snippet

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

    <root>

    <item>

    <nome>Carlos</nome>

    <endereco>Rua dos Crisantemos</endereco>

    <email>carlosmonteiro@msn.com</email>

    </item>

    <item>

    <nome>Erica</nome>

    <endereco>Pça Rui Salles</endereco>

    <email>erica@hotmail.com</email>

    </item>

     

    </root>

     

    Leitura e inserção do arquivo:

    Code Snippet
     

    SqlConnection conn = new SqlConnection("SUA_STRING_CONEXAO");

    string arquivo = @"CAMINHO\SEUARQUIVO.xml";

     

    if (File.Exists(arquivo))

    {

    XmlDocument xmlDoc = new XmlDocument();

    xmlDoc.Load(arquivo);

     

    for (int i = 0; i < xmlDoc.DocumentElement.ChildNodes.Count; i++)

    {

    SqlCommand cmd = new SqlCommand();

    cmd.CommandType = CommandType.Text;

    cmd.Connection = conn;

     

    cmd.CommandText = "INSERT INTO SUA_TABELA(CAMPO1, CAMPO2, CAMPO3) VALUES(@PARAMETRO1, @PARAMETRO2, @PARAMETRO3)";

     

    cmd.Parameters.AddWithValue("@PARAMETRO1", xmlDoc.DocumentElement.ChildNodes[i].ChildNodes[0].InnerText);

     

    cmd.Parameters.AddWithValue("@PARAMETRO2", xmlDoc.DocumentElement.ChildNodes[i].ChildNodes[1].InnerText);

     

    cmd.Parameters.AddWithValue("@PARAMETRO3", xmlDoc.DocumentElement.ChildNodes[i].ChildNodes[2].InnerText);

     

    conn.Open();

    cmd.ExecuteNonQuery();

    conn.Close();

    }

    }

     

     

    Espero ter ajudado!

     

    []s

     

    PS: Se o post foi útil, marque-o como resposta! ;-)

     

    terça-feira, 2 de dezembro de 2008 12:25

Todas as Respostas

  •  

    Olá Lucas,

     

    Você não deu muitos detalhes de como é a estrutura do seu xml, nem qual banco vc está usando, mas segue um exemplo de como ler um xml e importá-lo para uma tabela de um banco SQL Server:

     

    Arquivo XML:

    Code Snippet

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

    <root>

    <item>

    <nome>Carlos</nome>

    </item>

    <item>

    <nome>Erica</nome>

    </item>

    <item>

    <nome>Joaquina</nome>

    </item>

    </root>

     

    Leitura e inserção do arquivo:

    Code Snippet
     

    SqlConnection conn = new SqlConnection("SUA_STRING_CONEXAO");

    string arquivo = @"CAMINHO\SEUARQUIVO.xml";

     

    if (File.Exists(arquivo))

    {

    XmlDocument xmlDoc = new XmlDocument();

    xmlDoc.Load(arquivo);

     

    for (int i = 0; i < xmlDoc.DocumentElement.ChildNodes.Count; i++)

    {

    SqlCommand cmd = new SqlCommand();

    cmd.CommandType = CommandType.Text;

    cmd.Connection = conn;

     

    cmd.CommandText = "INSERT INTO SUA_TABELA(SEU_CAMPO) VALUES(@NOME_DO_PARAMETRO)";

    cmd.Parameters.AddWithValue("@NOME_DO_PARAMETRO", xmlDoc.DocumentElement.ChildNodes[i].InnerText);

     

    conn.Open();

    cmd.ExecuteNonQuery();

    conn.Close();

    }

    }

     

     

     

    Dependendo da sua estrutura, talvez seja possível inserir os dados de formas mais interessantes, mas qualquer coisa, avisa ai.

     

    Espero ter ajudado!

     

    []s

     

    PS: Se o post foi útil, marque-o como resposta! ;-)

     

    sexta-feira, 28 de novembro de 2008 13:08
  • Olá Carlos.

    Desde já agradeço a sua ajuda.

    A estrutura do arquivo contem muitos dados e muitos campos de vários tipos(varchar, int, decimal). Se puder me passar um codigo inserindo vários campos de tipos diferentes(varchar, int, decimal),ficaria muito grato.

    A minha questão é a seguinte:

    Eu recebo os dados de um outro sistema num arquivo aspx não tenho acesso ao banco de dados deles.
    A saida deste arquivo aspx é um xml.
    Preciso ler este arquivo aspx com dados no formato xml e inserir no meu banco.É a integração entre os dois sistemas, só que
    em vez de me enviar um arquivo xml, eles enviam um arquivo.aspx com dados xml. Preciso abrir esta url e ler este arquivo.aspx
     

    Exemplo do tipo de arquivo que recebo para inserir no meu banco de dados
    Na classe NomeClasse.cs
    public DataSet GetAll()
            {
               
                SqlDataAdapter SqlCommand1 = new SqlDataAdapter("NOME_PROCEDURE", conn);
                SqlCommand1.SelectCommand.CommandType = CommandType.StoredProcedure;

                DataSet dsLocalidade = new DataSet();
                SqlCommand1.Fill(dsLocalidade);

                return dsLocalidade;
            }

    no aspx , arquivo.aspx          
         NomeClasse nome_a = new NomeClasse();
                dataset = nome_a.GetAll();

                Response.Expires = 0;
                Response.ContentType = "text/xml";
                Response.Write(dataset.GetXml());

    este é o tipo de arquivo que recebo, compreende?

     

    Desde já agradeço a sua ajuda.

    sexta-feira, 28 de novembro de 2008 15:08
  • O banco é Sql Server 2005.

    Obrigado.

     

    sexta-feira, 28 de novembro de 2008 15:10
  • Boa Tarde,

     

    Nesse caso há duas opções. Você pode simplesmente carregar o XML para um tipo de dados XML e a partir do SQL Server 2005 utilizar os métodos XML para transformar o XML em dados (Shredding). Outra opção é utilizar a classe XmlDataDocument. Essa classe herda de XmlDocument e possui um método DataSet. Esse método gera um DataSet que representa uma estrutura relacional e pode ser utilizado em conjunto com o SqlAdapter para enviar os dados para o banco.

     

    Sobre os métodos XML, consulte o link abaixo:

     

    SQL Server 2005 New Features: Os métodos XML - Parte 1

    http://www.plugmasters.com.br/sys/materias/773/1/SQL-Server-2005-New-Features%3A-Os-m%E9todos-XML---Parte-1

     

    [ ]s,

     

    Gustavo

    sábado, 29 de novembro de 2008 15:12
  • Valeu Gustavo.

    Meu conhecimento é limitado, se puder me passar algum exemplo. Sou iniciante .

    Estou usando Framework 2.0 e Sql Server 2005

    segunda-feira, 1 de dezembro de 2008 10:49
  • Olá Lucas,

     

    Qual das alternativas você vai querer usar ? A classe XmlDataDocument ou o tipo de dados XML do 2005 ?

     

    [ ]s,

     

    Gustavo

     

    segunda-feira, 1 de dezembro de 2008 12:24
  • Olá Gustavo,

    A alternativa XmlDataDocument.

    Desde de já te agradeço muito.

     

    segunda-feira, 1 de dezembro de 2008 12:32
  • Olá Lucas,

     

    Essa alternativa está disponível no help do Visual Studio 2005.

    Em todo caso, analisando melhor, talvez a alternativa do Carlos seja mais interessante.

     

    Ela não o atenderia ?

     

    [ ]s,

     

    Gustavo

    segunda-feira, 1 de dezembro de 2008 22:10
  • Olá Gustavo.

    O codigo do Carlos esta funcionando, mas só com um campo estou tentando adicionar mais campos, mas não consegui.

    Obrigado pela ajuda.

    Abraços.

    terça-feira, 2 de dezembro de 2008 11:45
  • Olá Lucas,

     

    Como está a estrutura do seu xml?

     

    Veja um exemplo com mais campos:

     

    Arquivo XML:

    Code Snippet

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

    <root>

    <item>

    <nome>Carlos</nome>

    <endereco>Rua dos Crisantemos</endereco>

    <email>carlosmonteiro@msn.com</email>

    </item>

    <item>

    <nome>Erica</nome>

    <endereco>Pça Rui Salles</endereco>

    <email>erica@hotmail.com</email>

    </item>

     

    </root>

     

    Leitura e inserção do arquivo:

    Code Snippet
     

    SqlConnection conn = new SqlConnection("SUA_STRING_CONEXAO");

    string arquivo = @"CAMINHO\SEUARQUIVO.xml";

     

    if (File.Exists(arquivo))

    {

    XmlDocument xmlDoc = new XmlDocument();

    xmlDoc.Load(arquivo);

     

    for (int i = 0; i < xmlDoc.DocumentElement.ChildNodes.Count; i++)

    {

    SqlCommand cmd = new SqlCommand();

    cmd.CommandType = CommandType.Text;

    cmd.Connection = conn;

     

    cmd.CommandText = "INSERT INTO SUA_TABELA(CAMPO1, CAMPO2, CAMPO3) VALUES(@PARAMETRO1, @PARAMETRO2, @PARAMETRO3)";

     

    cmd.Parameters.AddWithValue("@PARAMETRO1", xmlDoc.DocumentElement.ChildNodes[i].ChildNodes[0].InnerText);

     

    cmd.Parameters.AddWithValue("@PARAMETRO2", xmlDoc.DocumentElement.ChildNodes[i].ChildNodes[1].InnerText);

     

    cmd.Parameters.AddWithValue("@PARAMETRO3", xmlDoc.DocumentElement.ChildNodes[i].ChildNodes[2].InnerText);

     

    conn.Open();

    cmd.ExecuteNonQuery();

    conn.Close();

    }

    }

     

     

    Espero ter ajudado!

     

    []s

     

    PS: Se o post foi útil, marque-o como resposta! ;-)

     

    terça-feira, 2 de dezembro de 2008 12:25
  •  

    Valeu Carlos, muito obrigado. Tudo OK.
    quinta-feira, 4 de dezembro de 2008 12:36