Posts
Olá Sérgio segue abaixo um exemplo, eu utilizei um DataSet para simular sua tabela.
using System;
using System.Data;
public partial class DevMedia : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
private static DataSet GetDataSet()
{
using (DataSet ds = new DataSet())
{
DataTable dt = new DataTable("Table");
dt.Columns.Add("CODIGO", Type.GetType("System.String"));
dt.Columns.Add("PROFISSIONAL", Type.GetType("System.String"));
dt.Columns.Add("NOME", Type.GetType("System.String"));
DataRow dr = dt.NewRow();
dr["CODIGO"] = "10";
dr["PROFISSIONAL"] = "PROGRAMADOR";
dr["NOME"] = "JOS HENRIQUE";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["CODIGO"] = "11";
dr["PROFISSIONAL"] = "TECNICO";
dr["NOME"] = "CARLOS FERREIRA";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["CODIGO"] = "12";
dr["PROFISSIONAL"] = "TECNICO";
dr["NOME"] = "FELIPE";
dt.Rows.Add(dr);
ds.Tables.Add(dt);
return ds;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
const string NomeArquivo = "C:\\Teste.XML";
using (DataSet ds = GetDataSet())
{
ds.WriteXml(NomeArquivo, XmlWriteMode.IgnoreSchema);
}
}
}
Resultado
Fábio
Vou implementar o código q vc mandou, mas surgiu umas duvidas.
1o) me explique melhor o funcionamento desta linh a-> using (DataSet ds = new DataSet()). PQ este using? Pq não definir simplementes o DataSet?
2o) Sobre a questão da Serialização, pd me explicar melhor?
[]s
Sérgio
1 - O using atende a liberação de recursos. O objeto que será instânciado no comando "using", é liberado automaticamente, ou seja, é chamado o "Dispose" deste objeto de forma totalmente automática.
O using é um tipo de atalho da liguagem. O compilador traduz o using para um comando muito semelhante a instrução nativa try/finaly.
Na prática como funciona? Vejamos um exemplo simples:
======================================================
SqlConnection cn = new SqlConnection (ConnectionString);
SqlCommand cm = new SqlCommand(commandString, cn); SqlCommand cm = novo SqlCommand (commandString, cn);
cn.Open(); cn.Open ();
cm.ExecuteNonQuery();
cn.Close(); cn.Close ();
======================================================
SEMPRE UTILIZE ESTA OPÇÃO
using (SqlConnection cn = new SqlConnection(connectionString))
{
using (SqlCommand cm = new SqlCommand(commandString, cn))
{
cn.Open();
cm.ExecuteNonQuery();
}
}
PERCEBA QUE NÃO PRECISEI ME PREOCUPAR EM FECHAR A CONEXÃO.
======================================================
SqlConnection cn = null;
SqlCommand cm = null;
try
{
cn = new SqlConnection(connectionString);
cm = new SqlCommand(commandString, cn);
cn.Open();
cm.ExecuteNonQuery();
}
finally
{
if (null != cm);
cm.Dispose();
if (null != cn)
cn.Dispose();
}
============================================================
2 - Serialização (serialization) é o processo onde você converte um objeto em um stream de bytes para persistí-lo na memória, em um banco de dados ou em arquivo. A idéia é salvar o estado do objeto para que a aplicação seja capaz de restaurar o estado atual do objeto quando necessário. O processo inverso é chamado de deserialização (deserialization).
Mais uma duvida...
Qdo eu uso o comando "... using (DataSet ds = new Dataset()) "
tudo o que escrevo entre as chaves é referente ao DataSet (no caso), em questão ?
using (DataSet ds = new Dataset())
{
// Tudo relacionado ao DataSet ds
}
Outra duvida, ao invés de montar os dados através do DataRow dr, vc teria algum outro exemplo usando apenas o dataSet com os dados vindo de uma Select? // DataReader
Abs
Sérgio
Segue o meu novo código... Mas estou tendo algumas duvidas, em relação a popular a 2a. dataTable, com os dados que vieram da Select.
**** SEGUE CODIGO ***
public partial class Default2 : System.Web.UI.Page
{
DataTable dt = new DataTable("Tabela");
string sSQL = "SELECT top 10 FC_ID_PROFISSIONAL AS CODIGO, CLIENTE_NOME_PROFISSIONAL AS PROFISSIONAL, CLIENTE_PRIMEIRO_NOME AS NOME, CLIENTE_NOMES_MEIO AS MEIO, "+
"CLIENTE_SOBRENOME AS SOBRENOME "+
"FROM FC_NOVARTIS001 ";
protected void Page_Load(object sender, EventArgs e)
{
MostraDados();
}
private void MostraDados()
{
da.OpenConection();
dt = da.ExecuteReader(sSQL);
gvAcao.DataSource = dt;
gvAcao.DataBind();
da.CloseConection();
}
private static DataSet GetDataSet()
{
DataAccess da = new DataAccess();
using (DataSet ds = new DataSet())
{
DataTable dt = new DataTable("Table");
dt.Columns.Add("CODIGO", Type.GetType("System.String"));
dt.Columns.Add("PROFISSIONAL", Type.GetType("System.String"));
dt.Columns.Add("NOME", Type.GetType("System.String"));
// Como pegar os dados aqui da que virão da SQL ?
}
}
protected void Button1_Click(object sender, EventArgs e)
{
const string NomeArquivo = "C:\\Teste.XML";
using (DataSet ds = GetDataSet())
{
dt.WriteXml(NomeArquivo);
}
}
}
Não entendi sua dúvida, você pode postar uma por vez?
Fabio
A aplicação que estou montando irá gerar o arquivo XML, a partir de uma consulta(ExecuteReader), o qual irá gerar os dados para um GRIDVIEW. Após gerar estes dados na gridView, o usuário irá decidir ou não se via gerar o arquivo XML.
Acontece que eu já consegui fazer com que o sistema "crie no disco o arquivo XML", mas não conigo fazer com que ele leve os dados da GRID, que vieram do DataTable.
ou seja, uma vez populado o DataTable, estes memsos dados deverão ir para a GRIDVIEW e para o Arquivo XML.
*** SEGUE A MINHA ULTIMA VERSÂO DOS FONTES ****
public partial class Default2 : System.Web.UI.Page
{
// DataTable dt = new DataTable("Tabela");
DataAccess da = new DataAccess();
DataTable dt = new DataTable();
string sSQL = "SELECT top 10 FC_ID_PROFISSIONAL AS CODIGO, CLIENTE_NOME_PROFISSIONAL AS PROFISSIONAL, CLIENTE_PRIMEIRO_NOME AS NOME, CLIENTE_NOMES_MEIO AS MEIO, "+
"CLIENTE_SOBRENOME AS SOBRENOME "+
"FROM FC_NOVARTIS001 ";
protected void Page_Load(object sender, EventArgs e)
{
MostraDados();
}
private void MostraDados()
{
da.OpenConection();
dt = da.ExecuteReader(sSQL);
gvAcao.DataSource = dt;
gvAcao.DataBind();
da.CloseConection();
}
private static DataSet GetDataSet()
{
using (DataSet ds = new DataSet())
{
DataTable dt = new DataTable("Table");
dt.Columns.Add("CODIGO", Type.GetType("System.String"));
dt.Columns.Add("PROFISSIONAL", Type.GetType("System.String"));
dt.Columns.Add("NOME", Type.GetType("System.String"));
// Como pegar os dados aqui da que virão da SQL ?
return ds;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
const string NomeArquivo = "C:\\Teste.XML";
using (DataSet ds = GetDataSet())
{
ds.WriteXml(NomeArquivo, XmlWriteMode.IgnoreSchema);
}
}
}
Sérgio basta você criar um método que retorno um DataSet (não pode ser DataTable e nem DataReader), com este método você pode fazer um Bind no Grid e gerar o arquivo XML.
Espero ter ajudado
=============================================
A aplicação que estou montando irá gerar o arquivo XML, a partir de uma consulta(ExecuteReader), o qual irá gerar os dados para um GRIDVIEW. Após gerar estes dados na gridView, o usuário irá decidir ou não se via gerar o arquivo XML.
Acontece que eu já consegui fazer com que o sistema "crie no disco o arquivo XML", mas não conigo fazer com que ele leve os dados da GRID, que vieram do DataTable.
ou seja, uma vez populado o DataTable, estes memsos dados deverão ir para a GRIDVIEW e para o Arquivo XML.
Sérgio basta você criar um método que retorno um DataSet (não pode ser DataTable e nem DataReader), com este método você pode fazer um Bind no Grid e gerar o arquivo XML.
Espero ter ajudado
=============================================
A aplicação que estou montando irá gerar o arquivo XML, a partir de uma consulta(ExecuteReader), o qual irá gerar os dados para um GRIDVIEW. Após gerar estes dados na gridView, o usuário irá decidir ou não se via gerar o arquivo XML.
Acontece que eu já consegui fazer com que o sistema "crie no disco o arquivo XML", mas não conigo fazer com que ele leve os dados da GRID, que vieram do DataTable.
ou seja, uma vez populado o DataTable, estes memsos dados deverão ir para a GRIDVIEW e para o Arquivo XML.
Fabio,
Bom Dia
Continuo com dúvida. Não estou conseguindo saber o lugar certo de fazer isto.
[]s
Sérgio
Fabio,
Bom Dia
Continuo com dúvida. Não estou conseguindo saber o lugar certo de fazer isto.
Eu preciso criar os nòs antes? ou ele vai pegar direto os nomes dos campos da Select?
[]s
Sérgio
Vamos tentar explicar novamente, vou criar o projeto inteiro para você.
Página ASPX tem dois botões e um grid.
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
/// <summary>
/// Retorna o dataset, select no seu banco.
/// </summary>
/// <returns></returns>
private DataSet RetornaDataSet()
{
DataSet ds = new DataSet();
using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["cnnString"].ConnectionString))
{
string sql = "SELECT top 10 FC_ID_PROFISSIONAL AS CODIGO, CLIENTE_NOME_PROFISSIONAL AS PROFISSIONAL, CLIENTE_PRIMEIRO_NOME AS NOME, CLIENTE_NOMES_MEIO AS MEIO, " +
"CLIENTE_SOBRENOME AS SOBRENOME " + "FROM FC_NOVARTIS001 ";
using (SqlCommand cmd = new SqlCommand(sql, cn))
{
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds);
}
}
return ds;
}
//Aqui vc preenche o Grid, chamando o RetornaDataSet
protected void btnGrid_Click(object sender, EventArgs e)
{
GridView1.DataSource = RetornaDataSet();
GridView1.DataBind();
}
//Aqui vc gera o XML, usando o mesmo metodo
protected void btnXML_Click(object sender, EventArgs e)
{
const string NomeArquivo = "C:\\Teste.XML";
using (DataSet ds = RetornaDataSet())
{
ds.WriteXml(NomeArquivo, XmlWriteMode.IgnoreSchema);
}
}
}
====================================================
Resultado do Grid
CODIGO
PROFISSIONAL
NOME
MEIO
SOBRENOME
1
PEDRO
JOSE
FERREIRA
JOSE
2
MARIA
DAS DORES
SOARES
DAS DORES
3
RITA
CASSIA
SILVA
CASSIA
4
LUCIO
FERNANDO
CARLOS
FERNANDO
=====================================================
Resultado o arquivo XML - Não precisa fazer nada, o WriteXml faz tudo para você.
<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<Table>
<CODIGO>1</CODIGO>
<PROFISSIONAL>PEDRO</PROFISSIONAL>
<NOME>JOSE</NOME>
<MEIO>FERREIRA</MEIO>
<SOBRENOME>JOSE</SOBRENOME>
</Table>
<Table>
<CODIGO>2</CODIGO>
<PROFISSIONAL>MARIA </PROFISSIONAL>
<NOME>DAS DORES</NOME>
<MEIO>SOARES</MEIO>
<SOBRENOME>DAS DORES</SOBRENOME>
</Table>
<Table>
<CODIGO>3</CODIGO>
<PROFISSIONAL>RITA</PROFISSIONAL>
<NOME>CASSIA</NOME>
<MEIO>SILVA</MEIO>
<SOBRENOME>CASSIA</SOBRENOME>
</Table>
<Table>
<CODIGO>4</CODIGO>
<PROFISSIONAL>LUCIO</PROFISSIONAL>
<NOME>FERNANDO</NOME>
<MEIO>CARLOS</MEIO>
<SOBRENOME>FERNANDO</SOBRENOME>
</Table>
</NewDataSet>
Valeu Fabio
Agora que entendi. Como vem da Select, não preciso especificar o nome para o XML e nem criar o nome das labels da Coluna.
Era isto q eu estava me enrolando.
Obrigado!
Pd fechar este post!