C #
- Criando XML a partir de um banco de dados SQL Server
Você precisar acessar e obter informações de um banco de dados, e, após extraí-las as mesmas deverão ser exibidas no formato XML.
Essa tarefa que aparentemente parece complexa é muito simples de ser feita usando os recursos da linguagem C#, LINQ to SQL, LINQ to XML e ADO .NET.
Para ilustrar tal simplicidade vamos criar um exemplo usando o Visual C# 2010 Express edition e usando os recursos do LINQ to SQL, LINQ to XML e ADO .NET vamos acessar, extrair e transforma os dados em um única consulta para em seguida exibi-los no formato XML.
Como exemplo eu vou usar o banco de dados Northwind.mdf do SQL Server (conhece ?) de onde vou realizar as seguintes operações:
Criando o Projeto C#
Abra o Visual C# 2010 Express Edition e crie um novo projeto do tipo Windows Forms Application com o nome XML_DataBase;
No menu Project clique em Add New Item e a seguir selecione o template LINQ to SQL Classes, informe o nome Northwind.dbml e clique em OK;
![]() |
A partir da janela DataBase Explorer, arraste e solte no descritor LINQ to SQL as tabelas Customer,Orders, Suppliers e para gerar o modelo conceitual e o mapeamento para as classes do domínio da aplicação:
![]() |
A seguir no formulário form1.cs vamos definir uma interface usando os controles:
Conforme o leiaute da figura a seguir:
![]() |
Agora vamos definir os namespaces usados no projeto conforme abaixo:
using System;
using System.Data;
using System.Windows.Forms;
using System.Xml.Linq;
using System.IO;
using System.Data.SqlClient;
using System.Linq;
A seguir no início do formulário vamos definir as variáveis que iremos usar no projeto:
string
ArquivoXML = "C:\\dados\\ArquivoXMLGerado.xml";
NorthwindDataContext db = new NorthwindDataContext();
1- Gerando um arquivo XML via ADO .NET
No evento Click do botão ADO .NET vamos incluir o código que irá acessar o banco de dados Northwind.mdf e gerar o XML:
private void btnADONET_Click(object sender, EventArgs e) { string strConnection = "Server=.\\SQLEXPRESs;Database=Northwind;Trusted_Connection=True"; SqlConnection con = new SqlConnection(strConnection); try { //abre a conexão con.Open(); //define os registros que serão lidos SqlDataAdapter da = new SqlDataAdapter("select productid, productname, unitprice from Products", con); //definindo o dataset DataSet ds = new DataSet(); da.Fill(ds, "Categorias"); //preenchendo o dataset ds.WriteXml(ArquivoXML); //escreve o arquivo XML com nome defnido con.Close(); } catch (Exception ex) { MessageBox.Show("Erro ao acessar os dados : " + ex.Message); } } |
2- Gerando o arquivo XML via LINQ to XML
A LINQ to XML possui uma abordagem poderosa para criar elementos XML que é conhecida como construção funcional que permite a você criar todo ou partes da sua árvore XML em uma única instrução.
Na figura abaixo vemos a hierarquia de classes LINQ to XML:
![]() |
- Embora XElement
esteja abaixo na hierarquia de classes, ele é a classe
fundamental no LINQ to XML. (Árvores XML são geralmente composta de
uma árvore de XElements.)
- XAttributes são pares nome/valor associados a um
XElement.
- XDocuments são criados somente se for necessário
(Ex:tratar um DTD - Document Type Definition, etc.)
- Todos os outros XNodes só podem ser nós
folhas sob um XElement ou possivelmente um XDocument (se existirem
no nível da raiz).
- XAttribute e XNode são pares derivados
de uma classe base comum XObject e XAttributes
não são XNodes porque os atributos XML são pares nome/valor
associados a um elemento XML e não nós na árvore XML.
Assim para criar um XElement funcionarios basta definir o seguinte código LINQ to XML:
XElement funcionarios = new XElement("funcionarios", new XElement("empresa", new XElement("empresa_nome", "Patrick Tones"), new XElement("telefone", "55-378-0144"), new XElement("cargo", Diretor Executivo), new XElement("email", "macoratti@yahoo.com"), new XElement("empresa_id", "P68042"))); |
Pela endentação , o construtor XElement se assemelha a uma estruture base XML. A construção funcional é ativada por um um construtor XElement que toma os parâmetros objetos.
Com essa introdução vejamos como é simples gerar um XML...
No evento Click do botão LINQ to XML vamos incluir o código que irá gerar o XML usando LINQ to SQL e LINQ to XML:
private void btnXML_Click(object sender, EventArgs e) { XElement xml = new XElement("Contatos", from c in db.Suppliers orderby c.SupplierID select new XElement("Fornecedor", new XAttribute("FornecedorId", c.SupplierID), new XElement("Contato", c.ContactName), new XElement("Empresa", c.CompanyName)) ); xml.Save(ArquivoXML); } |
3- Filtrando dados em um arquivo XML
No evento Click do botão Filtrar vamos definir o código que irá filtrar dados no arquivo XML gerado:
private void btnFiltrar_Click(object sender, EventArgs e) { txtXML.Text = ""; // carrega o arquivo XML XDocument resultado = XDocument.Load(ArquivoXML); // Consulta os dados criando uma subconsulta var consulta = from c in resultado.Descendants("Fornecedor") where (int)c.Attribute("FornecedorId") < 5 select (string)c.Element("Contato") + " " + (string)c.Element("Empresa"); foreach (string nome in consulta) { txtXML.Text += "\n\tContato = " + nome; } } |
4- Acessando e exibindo dados de um arquivo XML
No evento Click do botão Ler e Exibir XML defina o código para abrir o arquivo XML usando um StreamReader;
private void btnLerXML_Click(object sender, EventArgs e) { if (ArquivoXML == string.Empty) { MessageBox.Show("Informe o nome do arquivo XML a carregar.", "XML", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { try { TextReader reader = new StreamReader(ArquivoXML); XElement root = XElement.Load(reader); //carrega o XML no TextBox txtXML.Text = root.ToString(); } catch (Exception ex) { MessageBox.Show("Erro : " + ex.Message); } } } |
Executando o projeto teremos:
![]() |
Arquivo XML gerado via ADO .NET |
![]() |
Arquivo XML gerado via LINQ to XML |
![]() |
Dados Filtrados do arquivo XML |
Pegue o projeto completo
aqui : XML_DataBase.zip
"E Jesus clamou e disse; Quem crê em mim, crê não em mim, mas naquele que me enviou. E que vê a mim, vê aquele que me enviou." João 12:44-45
Referências: