Usuário com melhor resposta
Lista com parametros biblioteca 3 camadas e StoreProcedure SQL Server

Pergunta
-
essoal, tenho uma biblioteca que utilizo para meus projetos. Tal biblioteca foi implementada para ser usada em 3 camadas. Porem preciso utiliza-la para execução de algumas procedures
porem, nao sei como passar uma lista de parametros a ser utilizada pelas procedures do bd, ou seja, andei realizando alguns estudos e verifiquei que geralmente,quando o prograador usa parametros é feito mais ou menos assim:
SqlCommand cmd = new SqlCommand("pInsert",cnn);
cmd.Parameters.AddWithValue("@name,_name);
cmd.Parameters.AddWithValue("@lastname,_lastname);
(...)
minha intenção é fazer da seguinte maneira, passar todos parametros juntamente com seu respectivo valor, de forma que dentro das minhas funções eu faça a leitura desses parametros e valores e executo de dentro da função, porem nao consegui um jeito para fazer isto...
Um exemplo mais pratico de como quero fazer:
//FUNÇÃO INTERNA PARA EXECUÇÃO
private SqlCommand SQL(string NameProcedure, >>ListaParametros<<)
{
if (NameProcedure != string.Empty)
{
try
{
using (cmd = new SqlCommand(NameProcedure, AbrirBanco()))
{
// cmd.Connection = AbrirBanco();
cmd.CommandType = CommandType.StoredProcedure;
>>PROCESSAMENTO DOS PARAMETROS<<
<Não sei como implementar>
}
}
//Caso ocorra algum erro, o metodo catch irá informar qual o erro
catch (SqlException ex)
{
//Retorna o erro apontado
throw ex;
}
}
return cmd;
}
//Função usada pelas outras classes para passar parameotrs SQL
public void MontarSQL(string NameProcedure, >>ListaParametros<<) bool UseProcedure)
{
if (NameProcedure != string.Empty)
{
try
SQL(NameProcedure,>>ListaParametros<<)true).ExecuteNonQuery();
catch (SqlException ex)
throw ex;
finally
FecharBanco(cnn);
}
}
Respostas
-
Pessoal, depois de uma longa conversa com um amigo, o mesmo me deu algumas ideias de como fazer a solicitação acima... Segue o código para quem quiser aprender como eu..
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Web.Configuration;
namespace ComandoSQLSever
{
public class ComandoSQLSever
{
private SqlCommand cmd { get; set; }
private SqlConnection cnn { get; set; }
public string ConnectionStringsWebConfig { get; set; }
public ComandoSQLSever()
{
cnn = new SqlConnection(ConnectionStringsWebConfig);
}
public ComandoSQLSever(string ConnectionStringsWebConfig)
{
this.ConnectionStringsWebConfig = ConnectionStringsWebConfig;
cnn = new SqlConnection(this.ConnectionStringsWebConfig);
}
/// <summary>
/// Realiza abertura do Banco de dados
/// </summary>
private void AbrirBanco()
{
if (this.cnn.State == ConnectionState.Closed)
this.cnn.Open();
}
/// <summary>
/// Realiza o fechamento seguro da conexao com o banco.
/// </summary>
private void FecharBanco()
{
this.cnn.Close();
}
private void SQL(SqlCommand cmd)
{
cmd.ExecuteNonQuery();
}
private void SQL(string sql)
{
if (sql != string.Empty)
{
Exception erro = null;
try
{
this.AbrirBanco();
cmd = this.cnn.CreateCommand();
cmd.CommandText = sql;
this.SQL(cmd);
this.FecharBanco();
}
catch (Exception ex)
{
erro = ex;
}
if (erro != null)
throw erro;
}
}
private void SQL(string sql, params SqlParameter[] parameters)
{
if (sql != string.Empty)
{
Exception erro = null;
try
{
this.AbrirBanco();
cmd = this.cnn.CreateCommand();
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameters);
this.SQL(cmd);
//this.FecharBanco();
}
catch (Exception ex)
{
erro = ex;
}
if (erro != null)
throw erro;
}
}
private SqlCommand Read(string sql)
{
if (sql != string.Empty)
{
Exception erro = null;
try
{
this.AbrirBanco();
cmd = this.cnn.CreateCommand();
cmd.CommandText = sql;
//cmd.ExecuteReader();
//this.FecharBanco();
}
catch (Exception ex)
{
erro = ex;
}
if (erro != null)
throw erro;
}
return cmd;
}
private SqlCommand Read(string sql, params SqlParameter[] parameters)
{
if (sql != string.Empty)
{
Exception erro = null;
try
{
this.AbrirBanco();
cmd = this.cnn.CreateCommand();
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameters);
//cmd.ExecuteReader();
//this.FecharBanco();
}
catch (Exception ex)
{
erro = ex;
}
if (erro != null)
throw erro;
}
return cmd;
}
/// <summary>
/// Método que executa os comandos em SQL, como Insert, Update, Delete
/// </summary>
/// <param name="sql">Passa-se uma string no formato em SQL ( {Insert into}--{Update set}--{Delete from}</param>
public void ExecuteNonQuery(string sql)
{
try
{
SQL(sql);
}
catch (Exception ex)
{
throw ex;
}
finally
{
FecharBanco();
}
}
/// <summary>
/// Método que executa os comandos em SQL, como Insert, Update, Delete
/// </summary>
/// <param name="sql">Passa-se uma string no formato em SQL ( {Insert into}--{Update set}--{Delete from}</param>
/// <param name="parameters">Parametros</param>
public void ExecuteNonQuery(string sql, params SqlParameter[] parameters)
{
try
{
SQL(sql, parameters);
}
catch (Exception ex)
{
throw ex;
}
finally
{
FecharBanco();
}
}
/// <summary>
///
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public IDataReader IDataReader(string sql)
{
IDataReader dr = Read(sql).ExecuteReader();
return dr;
}
public IDataReader IDataReader(string sql, params SqlParameter[] parameters)
{
IDataReader dr = Read(sql, parameters).ExecuteReader();
return dr;
}
public DataSet DataSet(string sql)
{
SqlDataReader dr = Read(sql).ExecuteReader();
DataTable dt = new DataTable();
dt.Load(dr);
DataSet ds = new DataSet();
ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
public DataSet DataSet(string sql, params SqlParameter[] parameters)
{
SqlDataReader dr = Read(sql, parameters).ExecuteReader();
DataTable dt = new DataTable();
dt.Load(dr);
DataSet ds = new DataSet();
ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
}
}- Marcado como Resposta Nelson_lucas sexta-feira, 18 de dezembro de 2015 04:31