Inquiridor
SQL Server 2000

Discussão Geral
-
Galera, estou utilizando o codigo abaixo, porém para dar manutenção é mt complicado, gostaria de dicas para melhorar, estou pensando em criar proc mais não sei como fazer em C# (as proc no sql tudo bem) alguem poderia me ajudar?
segue um exemplo de um GID
this.Cursor = Cursors.WaitCursor; // Conexão string strProvider = "Data Source=ip, porta; Integrated Security=SSPI;"; //define a instrução SQL string strSql = "SELECT mesano AS 'Data',subpro AS 'Tarifa',nmproduto AS 'Descrição da Tarifa',grupo AS 'Grupo',SUM(res_receit) AS 'Receita' FROM bd.dbo.tb WHERE subpro = " + this.lblTarifa.Text + " GROUP BY mesano,subpro,nmproduto,grupo ORDER BY mesano"; //cria a conexão com o banco de dados SqlConnection sqlConn = new SqlConnection(strProvider); //cria o objeto command para executar a instruçao sql SqlCommand cmd = new SqlCommand(strSql, sqlConn); try { //abre a conexao sqlConn.Open(); //define o tipo do comando cmd.CommandType = CommandType.Text; //cria um dataadapter SqlDataAdapter da = new SqlDataAdapter(cmd); //cria um objeto datatable DataTable dt = new DataTable(); //preenche o datatable via dataadapter da.Fill(dt); //atribui o datatable ao datagridview para exibir o resultado this.dgvTarifa.DataSource = dt; this.dgvTarifa.AllowUserToAddRows = false; this.dgvTarifa.AllowUserToDeleteRows = false; int qtd_linhas = dgvTarifa.RowCount; if (qtd_linhas >= 65537) { MessageBox.Show("Sua consulta retornou " + qtd_linhas + " registros, por tanto não irá conseguir exportar para o Excel.", "Atenção"); this.btnExcel.Enabled = false; } else { MessageBox.Show("Sua consulta retornou " + qtd_linhas + " registros.", "Atenção"); this.btnExcel.Enabled = true; } } catch (SqlException ex) { MessageBox.Show("Erro de acesso aos dados " + ex.Message, "Erro"); } finally { // fecho a conexão sqlConn.Close(); }
Edgar Esteves - www.localdosuporte.com.br
Todas as Respostas
-
O ideal seria separar o acesso a dados em uma ClassLibrary e acessa-la de sua aplicação, assim ajudando mais na sua manutenção.
Mais informações em: http://www.microsoft.com/brasil/msdn/tecnologias/arquitetura/Layers_Developing.mspx
Mas não entrando no mérito de separar o código em camadas, me baseando de continuar todo o código junto da maneira que está, eu faria os seguintes procedimentos:
- Criar um Arquivo de Settings (ou um App.Config) para armazenas a string de conexao com o banco de dados, assim não precisando fazer um novo build toda vez que houver alguma alteração de servidor.
- Utilizando procedures fica da seguinte forma detalhes em negrito:
SqlConnection sqlConn = new SqlConnection(strProvider);
//cria o objeto command para executar a instruçao sql
SqlCommand cmd = new SqlCommand("NOMEDAPROCEDURE" , sqlConn);
try
{
//abre a conexao
sqlConn.Open();
//Não precisa abrir a conexão caso continue usando SqlDataAdapter
//define o tipo do comando
cmd.CommandType = CommandType.StoredProcedure;
//Adicione o parametros que necessite
cmd.Parameters.Add("@tarifa", SqlDbType.decimal).Value = this.lblTarifa.Text;
//cria um dataadapter
SqlDataAdapter da = new SqlDataAdapter(cmd);
//cria um objeto datatable
DataTable dt = new DataTable();
//preenche o datatable via dataadapter
da.Fill(dt);
//atribui o datatable ao datagridview para exibir o resultado
this .dgvTarifa.DataSource = dt;
Obs.: Caso eu tenha escrito alguns dos comandos de forma errada o intellisense do VS irá me corrigir;
Renato Veiga Jr / MCAD .Net