MELHOR MANEIRA DE RETORNAR VARISO REGISTROS

CAIO.FR.SP 22/02/2014 20:11:12
#435161
Galera estou ao poucos tentando deixar a codificação dos meus projetos da melhor forma possivel, de forma lenta mas continua.

Deem uma olhada nessa classe que criei:

 
class ClsUsuario
{
private string Tabela = [Ô]TabSenha[Ô];

public int CodUsuario { get; set; }
public string Usuario { get; set; }
public string Senha { get; set; }

public bool Select(string whereclause = [Ô][Ô])
{
bool ok = false;
string sql = [Ô]Select CodUsuario,Usuario,Senha from [Ô] + Tabela;
if (whereclause != string.Empty)
sql += [Ô] where [Ô] + whereclause;

clsConexao cnn = new clsConexao();
if (cnn.AbrirConexao())
{
OleDbDataReader dados = cnn.GetDataReader(sql);
while (dados.Read())
{
CodUsuario = (int)dados[[Ô]CodUsuario[Ô]];
Usuario = (string)dados[[Ô]Usuario[Ô]];
Senha = (string)dados[[Ô]Senha[Ô]];
}
cnn.FecharConexao();
cnn = null;
ok = true;
}
return ok;
}

public bool Insert()
{
bool ok = false;
string sql = [Ô]Insert into [Ô] + Tabela + [Ô] (CodUsuario,Usuario,Senha) Values ([Ô] + CodUsuario + [Ô],[ô][Ô] + Usuario + [Ô][ô],[ô][Ô] + Senha + [Ô][ô])[Ô];

clsConexao cnn = new clsConexao();
if(cnn.AbrirConexao())
{
ok = cnn.ExecutarComando(sql);
cnn.FecharConexao();
cnn = null;
}
return ok;
}

public bool Update(string whereclause)
{
bool ok = false;
string sql = [Ô]Update [Ô] + Tabela + [Ô] set Usuario = [ô][Ô] + Usuario + [Ô][ô], Senha = [ô][Ô] + Senha + [Ô][ô] [Ô] + whereclause;

clsConexao cnn = new clsConexao();
if (cnn.AbrirConexao())
{
ok = cnn.ExecutarComando(sql);
cnn.FecharConexao();
cnn = null;
}
return ok;
}

public bool Delete(string whereclause)
{
bool ok = false;
string sql = [Ô]Delete from [Ô] + Tabela + [Ô] where [Ô] + whereclause;

clsConexao cnn = new clsConexao();
if (cnn.AbrirConexao())
{
ok = cnn.ExecutarComando(sql);
cnn.FecharConexao();
cnn = null;
}
return ok;
}
}


ela esta funcionando quase 100%, só tenho um probleminha, como fazer para retornar uma vários registros do banco. Estava criando uma função que me retornava um datatable, dai vi em vários locais falando que é lento, e depois criei um função quase idêntica mas que retornava um datareader, só que encontrei um problema, tinha que deixar a conexao aberta ate preencher um grid,
queria a ajuda de você nesse ponto, esta lendo o tópico [ô]orientação a objetos[ô], mais achei meio difícil para mim no momento.

Desde já obrigado a todos.
JABA 23/02/2014 00:34:20
#435163
Dá uma olhadinha aqui: http://www.macoratti.net/11/10/pp_dao1.htm
TECLA 24/02/2014 10:38:56
#435202
Crie um método na classe de acesso à dados (ex, UsuarioDAO) que retorna uma lista de usuários.

Exemplo:
public List<ClsUsuario> listarUsuario()
{
// abre conexão
// seleciona os dados no banco
// alimenta a lista com os registros
// fecha a conexão e retorna a lista populada
}


O objeto DataGridView suporta o modelo de vinculação de dados implementado da interface IList.
Para alimentar a grade, é só passar a lista criada como fonte de dados do DataGridView.

Exemplo:
grade.DataSource = new UsuarioDAO().listarUsuario();
CAIO.FR.SP 24/02/2014 17:59:45
#435233
valeu pela resposta Tecla,
mais uma duvida:

tenho a seguinte classe usuario:

  
class ClsUsuario
{
public readonly string Tabela = [Ô]TabSenha[Ô];

public int CodUsuario { get; set; }
public string Usuario { get; set; }
public string Senha { get; set; }
public List<clsPermissoes> permissoes;
}


e a seguinte classe permissões:


class clsPermissoes
{
public string Tabela = [Ô]TabAcessos[Ô];

public int CodUsuario { get; set; }
public int CodRotina { get; set; }
}


e estou realizando a seguinte consulta em outra classe:


public static List<ClsUsuario> Select(string whereclause = [Ô][Ô])
{
ClsUsuario entidade = new ClsUsuario();
List<ClsUsuario> lista = new List<ClsUsuario>();
string sql = [Ô]Select * from [Ô] + entidade.Tabela;
if (whereclause != string.Empty)
sql += [Ô] where [Ô] + whereclause;

clsConexao cnn = new clsConexao();
if (cnn.AbrirConexao())
{
OleDbDataReader dados = cnn.GetDataReader(sql);
while (dados.Read())
{
entidade = new ClsUsuario();
entidade.CodUsuario = (int)dados[[Ô]CodUsuario[Ô]];
entidade.Usuario = (string)dados[[Ô]Usuario[Ô]];
entidade.Senha = (string)dados[[Ô]Senha[Ô]];
entidade.permissoes = clsPermissoesBll.Select([Ô]codUsuario = [Ô] + (int)dados[[Ô]CodUsuario[Ô]]);
lista.Add(entidade);
}
cnn.FecharConexao();
cnn = null;
}
return lista;
}


o problema e que assim que é feito o primeiro loop a conexão é fechada. tenho quase certeza que o problema esta neste codigo:

[c]
public static List<clsPermissoes> Select(string whereclause = [Ô][Ô])
{
clsPermissoes entidade = new clsPermissoes();
List<clsPermissoes> lista = new List<clsPermissoes>();
string sql = [Ô]Select * from [Ô] + entidade.Tabela;
if (whereclause != string.Empty)
sql += [Ô] where [Ô] + whereclause;

clsConexao cnn = new clsConexao();
if (cnn.AbrirConexao())
{
OleDbDataReader dados = cnn.GetDataReader(sql);
while (dados.Read())
{
entidade = new clsPermissoes();
entidade.CodUsuario = (int)dados[[Ô]CodUsuario[Ô]];
entidade.CodRotina = (int)dados[[Ô]CodRotina[Ô]];
lista.Add(entidade);
}
cnn.FecharConexao();
cnn = null;
}
return lista;
}
[/b]

como posso resolver isso?
Tópico encerrado , respostas não são mais permitidas