Array
(
)

Dúvida cruel

Djcacao
   - 16 mar 2006

Como verifico se um dataset esta vazio (o select não retornou nenhum registro) em C# ?

Grato desde ja

Martins
   - 16 mar 2006


Citação:
Como verifico se um dataset esta vazio (o select não retornou nenhum registro) em C# ?

Grato desde ja


Mas vc já fez isso antes, em sua outra rotina.

#Código

sqlCommand1.CommandText = "select *  etc..."; 
System.Data.SqlClient.SqlDataReader Clientes = sqlCommand1.ExecuteReader(); 

if (! Clientes.Read()) 
{ 
  System.Windows.Forms.MessageBox.Show("Está tabela está vazia..."); 
} 

Clientes.Close();


Djcacao
   - 16 mar 2006

Martins, tive que mudar os comandos de conexão para:

fbComm_atual.CommandText = ´select * from dbf_usuario where (usuario = @p_usu) and (senha = @p_senha)´;
fbComm_atual.Parameters.Clear();
fbComm_atual.Parameters.Add(´@p_usu´, edt_usuario.Text.ToString());
fbComm_atual.Parameters.Add(´@p_senha´, edt_senha.Text.ToString());
fbDataAdapter.Fill(ds_usuario, ´DBF_USUARIO´);

para depois poder usar esse outro comando:
if (ds_usuario.Tables[´DBF_USUARIO´].Rows[linhaAtual][´senha´].ToString() == edt_senha.Text.ToString())

conferindo a senha...

Por isso preciso saber com verificar se um dataset esta vazio...
Se poder me ajudar...

Massuda
   - 16 mar 2006

Faça algo assim...#Código

if (ds_usuario.Tables["DBF_USUARIO"].Rows.Count > 0) {
  // tabela não está vazia
}
else {
  // tabela está vazia
}
...


Martins
   - 16 mar 2006


Citação:
Faça algo assim...#Código

if (ds_usuario.Tables["DBF_USUARIO"].Rows.Count > 0) {
  // tabela não está vazia
}
else {
  // tabela está vazia
}
...


Prontinho o Massuda já respondeu, já q vc quer apenas verificar, use a dica acima.

Valew Massuda

Emerson
   - 16 mar 2006


Citação:
Martins, tive que mudar os comandos de conexão para:

fbComm_atual.CommandText = ´select * from dbf_usuario where (usuario = @p_usu) and (senha = @p_senha)´;
fbComm_atual.Parameters.Clear();
fbComm_atual.Parameters.Add(´@p_usu´, edt_usuario.Text.ToString());
fbComm_atual.Parameters.Add(´@p_senha´, edt_senha.Text.ToString());
fbDataAdapter.Fill(ds_usuario, ´DBF_USUARIO´);

para depois poder usar esse outro comando:
if (ds_usuario.Tables[´DBF_USUARIO´].Rows[linhaAtual][´senha´].ToString() == edt_senha.Text.ToString())

conferindo a senha...

Por isso preciso saber com verificar se um dataset esta vazio...
Se poder me ajudar...

o que você está solicitando é incoerente. a senha já é passada como parâmetro para a instrução SQL, portanto, depois de abrir o dataset, não será necessário conferir a senha. a menos que você altere sua instrução para:
fbComm_atual.CommandText = ´select * from dbf_usuario where (usuario = @p_usu)´;
fbComm_atual.Parameters.Clear();
fbComm_atual.Parameters.Add(´@p_usu´, edt_usuario.Text.ToString());
fbDataAdapter.Fill(ds_usuario, ´DBF_USUARIO´);

note que no exemplo acima a senha não será passada, tendo que ser conferida posteriormente (como você solicitou).

particularmente, prefiro a primeira opção:
você passa o usuário E a senha e verifica se o dataset retornou algum registro. se sim, usuário Ok; se não, usuário ou senha inválidos (fica indefinido qual falhou: usuario ou senha).

- da forma que você quer fazer é mais fácil quebrar a segurança, visto que se eu acertar o usuário, só precisarei ficar tentando - via ´força bruta´ - a senha
- da outra forma é preciso encontrar a combinação usuário/senha, mas o sistema não informará qual está errado, gerando maior dificuldade na quebra.

Djcacao
   - 17 mar 2006

Galera, muito obrigado pelas dicas...

realmente martins, continuo passando usuario e senha, porem cai em um problema que não conseguia resolver... o problema era o seguinte:

esqueci de vincular o fbconn_atual com o dataset, com isso, o resultado nunca era somente o usuario e a senha.

Vinculei e acabou o problema...

Agora tenho um outro dilema...
quando eu coloco um usuario e senha que não atende o select, ai invés do sistema informar que usuário é inválido, o sistema informa que não foi possivel conectar ao banco, a instrução de senha esta dentro de try...catch

Alguem sabe me ajudar ?

Um outro caso é que quero pegar o usuario digitado e informar no form de menu principal, que é o proximo a ser aberto....
então fiz uma classe assim:

public class conexao
{
string VSusuario;

public void seta_usuario(string nome)
{
VSusuario = nome;
}

public string pega_usuario()
{
return VSusuario.ToString();
}
}

porem quando faço o comando para associar o return a um item do statusbar, aparece um erro dizendo que não foi possivel conectar ao banco de dados.

Agradeço desde já...