Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
E ai galera, td beleza ?
Tô aprendendo a trabalhar com o C# Utilizando o Visual Studio 2005.
Porém, estou com uma enooorme dúvida :
Tenho que fazer a seguinte tarefa : Cria uma aplicação Windows Form contendo um label, um Textbox e um botão.
Ao clicar no botão, deve aparecer o nome do meu arquivo xml (ao menos eu acho que é isso).
Tenho duas classes : uma chamada XML (onde será extraído os valores do meu arquivo xml) e outra se chama SqlServer.
Dúvidas : Como consigo passar os valores extraídos do xml para serem inserido no banco de dados (trabalho com uma procedure que insere tais valores) ?
Como o meu a minha classe XML irá passar os parâmetros para a classe SqlServer ?
Como o nome do arquivo xml aparecerá no textbox quando eu apertar o botão ?
Estarei postando minhas classes e minha procedure.
http://forum.imasters.com.br/public/style_emoticons/default/excl.gif Detalhe : Criei 2 tabelas no BD NotaFiscal e ConfidenceLevel. A tabela ConfidenceLevel herda a chave primária da NotaFiscal.
Procedure :
========
CODE
Create PROCEDURE dbo.SP_GRAVA_DADOS_XML
-- Declaração de variáveis das tabelas NotaFiscal e ConfidenceLevel
@TipoDocumentoFiscal char(2),
@NumeroDocumentoFiscal varchar(10),
@Serie char(2),
@TipoDocumento char(2),
@CNPJFornecedor varchar(14),
@CNPJGerdau varchar(14),
@CNPJTransportadora varchar(14),
@DataEmissao datetime,
@CFOP char(6),
@ModeloNotaFiscal char(2),
@NumeroPedidoCompraNotaFiscal varchar(MAX),
@Placa varchar(MAX),
@ValorTotalNotaFiscal money,
@ValorTotalProduto money,
@ValorICMSNotaFiscal money,
@ValorIPINotaFiscal money,
@BaseICMS money,
@AliquotaICMS money,
@AliquotaIPI money,
@PesoTotalNota varchar(2),
@Volume char(2),
@FileSystem varchar(MAX),
@Usuario varchar(10),
@ValorISS money,
@NumeroViaNF char(2),
@DataLimiteEmissao datetime,
@NameSpace varchar(MAX),
@BaseCalculoICMSSubstituicao money,
@ValorICMSSubstituicao money,
@ValorFrete money,
@ValorSeguro money,
@OutrasDespesasAcessorias money,
@UserService varchar(MAX),
@ConfidenceLevel01 real,
@ConfidenceLevel02 real,
@ConfidenceLevel03 real,
@ConfidenceLevel04 real,
@ConfidenceLevel05 real,
@ConfidenceLevel06 real,
@ConfidenceLevel07 real,
@ConfidenceLevel08 real,
@ConfidenceLevel09 real,
@ConfidenceLevel10 real,
@ConfidenceLevel11 real,
@ConfidenceLevel12 real,
@ConfidenceLevel13 real,
@ConfidenceLevel14 real,
@ConfidenceLevel15 real,
@ConfidenceLevel16 real,
@ConfidenceLevel17 real,
@ConfidenceLevel18 real,
@ConfidenceLevel19 real,
@ConfidenceLevel20 real,
@ConfidenceLevel21 real,
@ConfidenceLevel22 real,
@ConfidenceLevel23 real,
@ConfidenceLevel24 real,
@ConfidenceLevel25 real,
@ConfidenceLevel26 real
AS
BEGIN
-- Inserindo valores na tabela NotaFiscal
INSERT INTO NotaFiscal
( TipoDocumentoFiscal, NumeroDocumentoFiscal, Serie, TipoDocumento,
CNPJFornecedor, CNPJGerdau, CNPJTransportadora, DataEmissao, CFOP,
ModeloNotaFiscal, NumeroPedidoCompraNotaFiscal, Placa, ValorTotalNotaFiscal,
ValorTotalProduto, ValorICMSNotaFiscal, ValorIPINotaFiscal, BaseICMS,
AliquotaICMS, AliquotaIPI, PesoTotalNota, FileSystem, Usuario, ValorISS,
NumeroViaNF, DataLimiteEmissao, NameSpace, BaseCalculoICMSSubstituicao,
ValorICMSSubstituicao, ValorFrete, ValorSeguro, OutrasDespesasAcessorias,
UserService ) VALUES
( @TipoDocumentoFiscal, @NumeroDocumentoFiscal, @Serie, @TipoDocumento,
@CNPJFornecedor, @CNPJGerdau, @CNPJTransportadora, @DataEmissao, @CFOP,
@ModeloNotaFiscal, @NumeroPedidoCompraNotaFiscal, @Placa,
@ValorTotalNotaFiscal, @ValorTotalProduto, @ValorICMSNotaFiscal,
@ValorIPINotaFiscal, @BaseICMS, @AliquotaICMS, @AliquotaIPI, @PesoTotalNota,
@FileSystem, @Usuario, @ValorISS, @NumeroViaNF, @DataLimiteEmissao,
@NameSpace, @BaseCalculoICMSSubstituicao, @ValorICMSSubstituicao,
@ValorFrete, @ValorSeguro, @OutrasDespesasAcessorias, @UserService )
-- A intrução SELECT @@identity pega o valor da chave primária/identificador
-- de cada registro inserido na tabela NotaFiscal. O valor que retornar
-- nessa consulta, será inserido no campo ID_NotaFiscal da tabela ConfidenceLevel.
declare @id int
set @id = (SELECT @@identity)
-- Inserindo valores na tabela ConfidenceLevel
INSERT INTO ConfidenceLevel
( ID_NotaFiscal, ConfidenceLevel01, ConfidenceLevel02, ConfidenceLevel03, ConfidenceLevel04,
ConfidenceLevel05, ConfidenceLevel06, ConfidenceLevel07, ConfidenceLevel08,
ConfidenceLevel09, ConfidenceLevel10, ConfidenceLevel11, ConfidenceLevel12,
ConfidenceLevel13, ConfidenceLevel14, ConfidenceLevel15, ConfidenceLevel16,
ConfidenceLevel17, ConfidenceLevel18, ConfidenceLevel19, ConfidenceLevel20,
ConfidenceLevel21, ConfidenceLevel22, ConfidenceLevel23, ConfidenceLevel24,
ConfidenceLevel25, ConfidenceLevel26 ) VALUES
( @id, @ConfidenceLevel01, @ConfidenceLevel02, @ConfidenceLevel03, @ConfidenceLevel04,
@ConfidenceLevel05, @ConfidenceLevel06, @ConfidenceLevel07, @ConfidenceLevel08,
@ConfidenceLevel09, @ConfidenceLevel10, @ConfidenceLevel11, @ConfidenceLevel12,
@ConfidenceLevel13, @ConfidenceLevel14, @ConfidenceLevel15, @ConfidenceLevel16,
@ConfidenceLevel17, @ConfidenceLevel18, @ConfidenceLevel19, @ConfidenceLevel20,
@ConfidenceLevel21, @ConfidenceLevel22, @ConfidenceLevel23, @ConfidenceLevel24,
@ConfidenceLevel25, @ConfidenceLevel26 )
END
Classe XML :
=========
CODE
using System;using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Collections;
using System.Data.SqlClient;
namespace ProjetoXml
{
// Classe de geração de arquivos XML
public partial class XML : Form
{
#region Construtor
public XML()
{
InitializeComponent();
}
#endregion
#region Gera XML
private void button1_Click(object sender, EventArgs e)
{
string caminhoXml= @"C:\Arquivos de programas\Xml_Gerdau"; // caminho onde os arquivos XML se encontram
XmlDocument arqXML = new XmlDocument(); // Criando um objeto da classe XmlDocument
arqXML.Load(caminhoXml); // Fazendo Load dos arquivos XML
XmlNodeList xmlCampos = arqXML.GetElementsByTagName(textBox1.Text); // Retorna uma lista de nós filhos
for (int i = 0; i < xmlCampos[0].ChildNodes.Count; i++)
{
XmlNode Node = xmlCampos[0].ChildNodes*; // Retorna todos os nós filhos de um nó*
* Hashtable param = new Hashtable(); // Criando um bjeto da classe HashTable*
// Esses param.Add devem ser armazenados em alguma variável para eu poder passar para a classe SqlServer ? Como faço ?
param.Add("@TipoDocumentoFiscal" + Node.Name, Node.Value);
param.Add("@NumeroDocumentoFiscal" + Node.Name, Node.Value);
param.Add("@Serie" + Node.Name, Node.Value);
param.Add("@TipoDocumento" + Node.Name, Node.Value);
param.Add("@CNPJFornecedor" + Node.Name, Node.Value);
param.Add("@CNPJGerdau" + Node.Name, Node.Value);
param.Add("@CNPJTransportadora" + Node.Name, Node.Value);
param.Add("@DataEmissao" + Node.Name, Node.Value);
param.Add("@CFOP" + Node.Name, Node.Value);
param.Add("@ModeloNotaFiscal" + Node.Name, Node.Value);
param.Add("@NumeroPedidoCompraNotaFiscal" + Node.Name, Node.Value);
param.Add("@Placa" + Node.Name, Node.Value);
param.Add("@ValorTotalNotaFiscal" + Node.Name, Node.Value);
param.Add("@ValorTotalProduto" + Node.Name, Node.Value);
param.Add("@ValorICMSNotaFiscal" + Node.Name, Node.Value);
param.Add("@ValorIPINotaFiscal" + Node.Name, Node.Value);
param.Add("@BaseICMS" + Node.Name, Node.Value);
param.Add("@AliquotaICMS" + Node.Name, Node.Value);
param.Add("@AliquotaIPI" + Node.Name, Node.Value);
param.Add("@PesoTotalNota" + Node.Name, Node.Value);
param.Add("@FileSystem" + Node.Name, Node.Value);
param.Add("@Usuario" + Node.Name, Node.Value);
param.Add("@ValorISS" + Node.Name, Node.Value);
param.Add("@NumeroViaNF" + Node.Name, Node.Value);
param.Add("@DataLimiteEmissao" + Node.Name, Node.Value);
param.Add("@NameSpace" + Node.Name, Node.Value);
param.Add("@BaseCalculoICMSSubstituicao" + Node.Name, Node.Value);
param.Add("@ValorICMSSubstituicao" + Node.Name, Node.Value);
param.Add("@ValorFrete" + Node.Name, Node.Value);
param.Add("@ValorSeguro" + Node.Name, Node.Value);
param.Add("@OutrasDespesasAcessorias" + Node.Name, Node.Value);
param.Add("@UserService" + Node.Name, Node.Value);
param.Add("@ConfidenceLevel01" + Node.Name, Node.Value);
param.Add("@ConfidenceLevel02" + Node.Name, Node.Value);
param.Add("@ConfidenceLevel03" + Node.Name, Node.Value);
param.Add("@ConfidenceLevel04" + Node.Name, Node.Value);
param.Add("@ConfidenceLevel05" + Node.Name, Node.Value);
param.Add("@ConfidenceLevel06" + Node.Name, Node.Value);
param.Add("@ConfidenceLevel07" + Node.Name, Node.Value);
param.Add("@ConfidenceLevel08" + Node.Name, Node.Value);
param.Add("@ConfidenceLevel09" + Node.Name, Node.Value);
param.Add("@ConfidenceLevel10" + Node.Name, Node.Value);
param.Add("@ConfidenceLevel11" + Node.Name, Node.Value);
param.Add("@ConfidenceLevel12" + Node.Name, Node.Value);
param.Add("@ConfidenceLevel13" + Node.Name, Node.Value);
param.Add("@ConfidenceLevel14" + Node.Name, Node.Value);
param.Add("@ConfidenceLevel15" + Node.Name, Node.Value);
param.Add("@ConfidenceLevel16" + Node.Name, Node.Value);
param.Add("@ConfidenceLevel17" + Node.Name, Node.Value);
param.Add("@ConfidenceLevel18" + Node.Name, Node.Value);
param.Add("@ConfidenceLevel19" + Node.Name, Node.Value);
param.Add("@ConfidenceLevel20" + Node.Name, Node.Value);
param.Add("@ConfidenceLevel21" + Node.Name, Node.Value);
param.Add("@ConfidenceLevel22" + Node.Name, Node.Value);
param.Add("@ConfidenceLevel23" + Node.Name, Node.Value);
param.Add("@ConfidenceLevel24" + Node.Name, Node.Value);
param.Add("@ConfidenceLevel25" + Node.Name, Node.Value);
param.Add("@ConfidenceLevel26" + Node.Name, Node.Value);
} // Fecha o for
/ Após pegar cada valor de cada campo do arquivo xml, os parâmetros serão enviados para a classe SQL.*
Mas como eu faço isso ?
/ PAREI POR AQUI. FIQUEI PERDIDA <_< . *
String conexao = conectar.ConnectionString;
SQLServer conectar = new SQLServer(); --> TEM QUE SER ASSIM OU conectar = new conectar = new SqlConnectio() ??
conectar.Conexao(conexao);
conectar.Query( );
conectar.getDataSet( );
conectar.ExecuteScalar( );
conectar.ExecutaProcedure( );
conectar.RetornaDadosProcedure ( );
conectar.MontaSQL( );
conectar.MontaCampos( ); /*
}
#endregion
private void textBox1_TextChanged(object sender, EventArgs e)
{
// O QUE EU DEVO FAZER AQUI ?
}
// Fecha o método button1_Click
} // Fecha a classe GeraXml
} // Fecha o namespace
Classe SQLServer
=============
Essa classe eu peguei de um outro programa, tanto que é de outro namespace, mas devo utilizála para conseguir passar as informações do xml
para o banco
CODE
*using System;**using System.Collections;*
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace ConexaoBD
{
public class SQLServer
{
#region AbreConexao
public static SqlConnection Conexao(string strConexao)
{
return new SqlConnection(strConexao);
}
public static SqlConnection Conexao(SqlConnectionStringBuilder strConexao)
{
return new SqlConnection(strConexao.ConnectionString);
//Retorna Data Source e ID do usuário
}
public static SqlConnection Conexao(string Servidor, string Usuario, string Senha, string Banco)
{
return new SqlConnection("Password="+ Senha +";Persist Security Info=True;User ID="+ Usuario +";Initial Catalog="+ Banco +";Data Source="+ Servidor );
}
public static SqlConnection Conexao(string Servidor, string Banco)
{
return new SqlConnection("Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=" + Banco + ";Data Source=" + Servidor);
}
#endregion
#region Metodos Publicos
public static DataTable Query(SqlConnection Conexao, string Tabela,List<Campo> Campos,List<Campo> Criterio)
{
// Representa uma ou mais tabelas em memória sem precisar acessar um banco de dados em disco
DataTable dt=new DataTable() ;
// Atualiza registros do Banco de dados
SqlDataAdapter adpt = new SqlDataAdapter(MontaSQL(Tabela, Campos, Criterio), Conexao);
// O SqlDataAdapter fornece as informações para o Fill que realiza as modificações necessárias
adpt.Fill(dt);
return dt;
}
public static DataTable getDataSet(SqlConnection Conexao, string SQL)
{
SqlConnection sqlCon = Conexao; // Inicia conexão única com o BD
* SqlDataAdapter sqlAdpt = new SqlDataAdapter(SQL, sqlCon); //Atualiza registros*
* DataTable ds = new DataTable();*
sqlAdpt.Fill(ds);
return ds;
}
public static string ExecuteScalar(SqlConnection Conexao, string SQL)
{
SqlConnection sqlCon = Conexao; //Inicia a conexão
* SqlCommand sqlCmd = new SqlCommand(SQL, sqlCon); // comando sql ou sp para execução no banco de dados*
* return sqlCmd.ExecuteScalar().ToString(); // Retorna qntd de linhas da consulta*
}
// Classe que executará uma StoreProceure
public static void ExecutaProcedure(SqlConnection Conexao, string ProcName, Hashtable ParamIn)
{
// Se a conexão estiver fechada, ela será aberta
if (Conexao.State == ConnectionState.Closed)
{
Conexao.Open();
}
SqlCommand sqlCmd = new SqlCommand();
// carrega parâmentros de entrada
foreach (DictionaryEntry Pi in ParamIn)
{
sqlCmd.Parameters.Add(new SqlParameter(Pi.Key.ToString(), Pi.Value.ToString()));
}
sqlCmd.CommandType = CommandType.StoredProcedure; // Diz que o tipo de comando é uma StoreProcedure
sqlCmd.CommandText = ProcName; // Recebe a procedure consulta e armazena em sqlCmd. Pode-se colocar o nome da procedure nesse local tbm
sqlCmd.Connection = Conexao; // Recebe a Conexao
sqlCmd.ExecuteNonQuery(); // Executa a query sem retornar valor
}
public static DataTable RetornaDadosProcedure(SqlConnection Conexao, string ProcName, Hashtable ParamIn)
{
// Se a conexão estiver fechada, ela será aberta
if (Conexao.State == ConnectionState.Closed)
{
Conexao.Open();
}
SqlCommand sqlCmd = new SqlCommand();
// carrega parâmentros de entrada
foreach (DictionaryEntry Pi in ParamIn)
{
sqlCmd.Parameters.Add(new SqlParameter(Pi.Key.ToString(), Pi.Value.ToString()));
}
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.CommandText = ProcName;
sqlCmd.Connection = Conexao;
* SqlDataAdapter sqlAdpt = new SqlDataAdapter(sqlCmd);*
* DataTable dtResult = new DataTable();*
sqlAdpt.Fill(dtResult);
return dtResult;
}
public static DataTable RetornaDadosProcedure(SqlConnection Conexao, string ProcName )
{
if (Conexao.State == ConnectionState.Closed)
{
Conexao.Open();
}
SqlCommand sqlCmd = new SqlCommand();
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.CommandText = ProcName;
sqlCmd.Connection = Conexao;
* SqlDataAdapter sqlAdpt = new SqlDataAdapter(sqlCmd);*
* DataTable dtResult = new DataTable();*
sqlAdpt.Fill(dtResult);
return dtResult;
}
#endregion
private static string MontaSQL(string Tabela, List<Campo> Campos, List<Campo> Criterio)
{
string strSQL = string.Empty; // A variável strSQL recebe um valor vazio
* strSQL = "Select " + MontaCampos(Campos, false) + " from " + Tabela + " where " + MontaCampos(Criterio,true) ;*
* return strSQL;*
}
private static string MontaCampos(List<Campo> Campos, bool criterio)
{
string strRetorno = string.Empty;
foreach(Campo campo in Campos)
{
if (criterio)
strRetorno = strRetorno + " " + campo.ToString() + " " + campo.Operador + " " + campo.ValorCampo + " " + campo.AgregadorCriterio.ToString() ;
else
strRetorno = strRetorno + " " + campo.ToString() + " ,";
}
return strRetorno.Substring(0,strRetorno.Length-3);
}
}
}
Obrigada pela atenção e espero a ajuda da galera ^^ http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
Bjos .
Carregando comentários...