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: