Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Caros amigos boa noite,
estou com um problema relativamente simples, porem revirei o google hoje o dia inteiro e nao consegui resolver.
estou fazendo a camada DAL de uma aplicacao e estou com dificuldades para retornar os dados da base e carregar um repeater.
segue minha camada DAL
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using IGrupo = LibraryCEA.Concrete.Modulo00_Controle.IGrupo;
namespace LibraryCEA.DAL.Modulo00_Controle
{
public class Grupo
{
public Grupo()
{ }
DataSet ds = new DataSet();
SqlConnection conexao;
//Parametros da Aplicacao
SqlCommand cmd = new SqlCommand();
SqlParameter sp1 = new SqlParameter();
SqlParameter sp2 = new SqlParameter();
SqlParameter sp3 = new SqlParameter();
SqlParameter sp4 = new SqlParameter();
ICollection<IGrupo> Lista = null;
public int Insert(IGrupo ItemGrupo, string conn)
{
try
{
conexao = new SqlConnection(conn);
cmd.Parameters.Add("@VAR_NOME", SqlDbType.VarChar).Value = ItemGrupo.var_nome;
cmd.Parameters.Add("@VAR_DESCRICAO", SqlDbType.VarChar).Value = ItemGrupo.var_descricao;
cmd.Parameters.Add("@FLG_ATIVO", SqlDbType.Int).Value = ItemGrupo.flg_ativo;
cmd.Parameters.Add("@FLG_COMBO", SqlDbType.Int).Value = ItemGrupo.int_combo;
SqlParameter ident = new SqlParameter("@FLG_RETORNO", DbType.Int32);
ident.Direction = ParameterDirection.Output;
cmd.Parameters.Add(ident);
cmd = new SqlCommand("SP_CASA_M0_TB_GRUPO_INSERT", conexao);
cmd.CommandType = CommandType.StoredProcedure;
conexao.Open();
cmd.ExecuteNonQuery();
int intGrupo = Convert.ToInt32(cmd.Parameters["@FLG_RETORNO"].Value);
return 1;
}
catch (Exception ex)
{
//lblmsg.Text = ex.Message;
return 0;
}
finally
{
conexao.Close();
}
}
public static DataSet getDataSet(string strSQL)
{
DataSet ds = new DataSet();
SqlConnection cn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["MsSQL"].ConnectionString);
cn.Open();
SqlDataAdapter da = new SqlDataAdapter(strSQL, cn);
ds.Tables.Add();
ds.EnforceConstraints = false; // Desabilita restrições SQL constraints, deixando o DataSet mais rápido (+/- engine MyIsam do MySQL)
ds.Tables[0].BeginLoadData(); // Trata todas as colunas sem diferença, sem PK, sem FK...
da.Fill(ds.Tables[0]);
cn.Close();
return ds;
cn = null;
}
public int Update(IGrupo ItemGrupo, string conn)
{
try
{
conexao = new SqlConnection(conn);
cmd.Parameters.Add("@ID_GRUPO", SqlDbType.Int).Value = ItemGrupo.id_grupo;
cmd.Parameters.Add("@VAR_NOME", SqlDbType.VarChar).Value = ItemGrupo.var_nome;
cmd.Parameters.Add("@VAR_DESCRICAO", SqlDbType.VarChar).Value = ItemGrupo.var_descricao;
cmd.Parameters.Add("@FLG_ATIVO", SqlDbType.Int).Value = ItemGrupo.flg_ativo;
cmd.Parameters.Add("@FLG_COMBO", SqlDbType.Int).Value = ItemGrupo.int_combo;
SqlParameter ident = new SqlParameter("@FLG_RETORNO", DbType.Int16);
ident.Direction = ParameterDirection.Output;
cmd.Parameters.Add(ident);
cmd = new SqlCommand("SP_CASA_M0_TB_GRUPO_UPDATE", conexao);
cmd.CommandType = CommandType.StoredProcedure;
conexao.Open();
cmd.ExecuteNonQuery();
return 1;
}
catch (Exception ex)
{
//lblmsg.Text = ex.Message;
return 0;
}
finally
{
conexao.Close();
}
}
public DataSet Select(IGrupo ItemGrupo, string conn)
{
try
{
conexao = new SqlConnection(conn);
cmd.Parameters.Add("@ID_GRUPO", SqlDbType.Int).Value = ItemGrupo.id_grupo;
cmd.Parameters.Add("@VAR_NOME", SqlDbType.VarChar).Value = ItemGrupo.var_nome;
cmd.Parameters.Add("@VAR_DESCRICAO", SqlDbType.VarChar).Value = ItemGrupo.var_descricao;
cmd.Parameters.Add("@FLG_ATIVO", SqlDbType.Int).Value = ItemGrupo.flg_ativo;
cmd.Parameters.Add("@FLG_COMBO", SqlDbType.Int).Value = ItemGrupo.int_combo;
cmd = new SqlCommand("SP_CASA_M0_TB_GRUPO_SELECT", conexao);
cmd.CommandType = CommandType.StoredProcedure;
conexao.Open();
//cmd.ExecuteNonQuery();
//SqlDataReader rdr = cmd.ExecuteReader();
SqlDataAdapter ta = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
ta.Fill(ds);
return ds;
}
catch (Exception ex)
{
//lblmsg.Text = ex.Message;
}
finally
{
conexao.Close();
}
}
}
}
Podem ver que no select existem algumas linhas comentadas, tentei de diversos modos, com lista, dataset e ICollection porem nenhum com resultados satisfatórios.
Como devo fazer este retorno para carregar o repeater, ou até um gridview.
Conto com a ajuda de todos.
Obrigado
Ola quintelab,
Esta é realmente a minha duvida(como popular minha classe e retornar por ela o resultado do Select na procedure), vou testar com o link que passou tambem e retorno.
Muito Obrigado
O básico é dar percorrer seu DataReader e ir alimentando os campos da sua classe, mais ou menos assim, fiz de cabeça, mas é a idéia:
List<SuaClasse> lista = new List<SuaClasse>();
while(reader.Read())
{
SuaClasse classe = new SuaClasse();
classe.CAMPO1 = reader["CAMPO1"].ToString();
classe.CAMPO2 = reader["CAMPO2"].ToString();
lista.Add(classe);
}
return lista;
Abraços...
Assim que eu pisar em casa hoje eu vou testar.
Esta é a maneira certo de fazer o DAL ?
Obrigado por enquanto.
É complicado em falar em maneira certa, tem que ver o que te atende, o correto pra mim é o que atendente o cliente.
Eu trabalho desta forma, mas ao invés de popular na mão campo por campo criei um framework pra isso.
Abraços...
está dando algum erro no código que você fez pois eu uso assim, como você demonstrou
você consegue chamar a função ???
Ola boa noite,
Desculpem na demora do retorno, esta semana esta muito corrido na empresa e tenho chego em casa muito tarde, mas hoje cheguei e ja vim para o computador.
Testei o codigo passado, no codigo nao deu erro, mas no metodo da erro e nao sei qual é. Segue o metodo abaixo.
public List<IGrupo> Select(IGrupo ItemGrupo, string conn)
{
try
{
conexao = new SqlConnection(conn);
cmd.Parameters.Add("@ID_GRUPO", SqlDbType.Int).Value = ItemGrupo.id_grupo;
cmd.Parameters.Add("@VAR_NOME", SqlDbType.VarChar).Value = ItemGrupo.var_nome;
cmd.Parameters.Add("@VAR_DESCRICAO", SqlDbType.VarChar).Value = ItemGrupo.var_descricao;
cmd.Parameters.Add("@FLG_ATIVO", SqlDbType.Int).Value = ItemGrupo.flg_ativo;
cmd.Parameters.Add("@FLG_COMBO", SqlDbType.Int).Value = ItemGrupo.int_combo;
cmd = new SqlCommand("SP_CASA_M0_TB_GRUPO_SELECT", conexao);
cmd.CommandType = CommandType.StoredProcedure;
conexao.Open();
//cmd.ExecuteNonQuery();
SqlDataReader reader = cmd.ExecuteReader();
List<IGrupo> lista = new List<IGrupo>();
while (reader.Read())
{
IGrupo classe = new IGrupo();
classe.id_grupo = Convert.ToInt32(reader["id_grupo"]);
classe.var_nome = reader["var_nome"].ToString();
classe.var_descricao = reader["var_descricao"].ToString();
classe.flg_ativo = Convert.ToInt32(reader["flg_ativo"]);
classe.int_combo = Convert.ToInt32(reader["int_combo"]);
lista.Add(classe);
}
return lista;
}
catch (Exception ex)
{
//lblmsg.Text = ex.Message;
}
finally
{
conexao.Close();
}
}
o codigo na hora de compilar da a seguinte mensagem.
Error 4 'LibraryCEA.DAL.Modulo00_Controle.Grupo.Select(LibraryCEA.Concrete.Modulo00_Controle.IGrupo, string)': not all code paths return a value
ha sim, o erro da no nome do metodo, ele fica em vermelho e náo compila.
Agradeço por enquanto.
O problema é que no catch não esta retornando nada, coloque um throw; dentro do catch.
Acredito que resolva.
Abraços...
Ou popule uma classe sua, ou retorne um DataReader: http://www.codeproject.com/KB/cs/tariq_datareader.aspx
Abraços...