Array
(
)

Problema com SELECT Access

Jair Souza
   - 23 mai 2014

Bom dia, não estou conseguindo acertar este SELECT em um BD Access :
Windows Form C#.
Assim ele só lê o login, usando OR :
#CódigoOleDbCommand comando = new OleDbCommand("SELECT Nome, Login From Funcionario WHERE Nome = @nome Or Login = @login", conexao);

Assim tem de ser os dois, se não não considera, usando AND ;
#CódigoOleDbCommand comando = new OleDbCommand("SELECT Nome, Login From Funcionario WHERE Nome = @nome AND Login = @login", conexao);

Assim dá erro dizendo que o operador está errado, usando | | ...
#CódigoOleDbCommand comando = new OleDbCommand("SELECT Nome, Login From Funcionario WHERE Nome = @nome | | Login = @login", conexao);

Mas eu preciso que o SELECT pegue se o nome for igual OU o login for igual como fazer alguém sabe ?

William Maximo
   - 23 mai 2014

OleDbCommand comando = new OleDbCommand("SELECT Nome, Login From Funcionario WHERE Nome = @nome Or Login = @login", conexao);

a primeira opção esta correta, mas quando se usa o operação = voce tem que escrever o nome da mesma maneira que esta salvo no banco

experimente usar Like
SELECT Nome, Login From Funcionario WHERE Nome like @nome OR Login like @login

Jair Souza
   - 24 mai 2014

Não mudou nada com LIKE, e o curioso é que para o primeiro registro ele considera tanto o nome como o login e avisa se um OU outro já está cadastrado, mas do segundo registro em diante não...assim está o código se tiver mais uma dica agradeço muito, pois já estou a mais de dez dias lutando com esta parte do projeto...

#Códigoprivate void BtnSalvar_Click(object sender, EventArgs e)
{
try
{
OleDbConnection conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Application.StartupPath + "\\BDBiblioteca.mdb");

OleDbCommand comando = new OleDbCommand("SELECT Nome, Login From Funcionario WHERE Nome LIKE @nome or Login LIKE @login", conexao);

comando.Parameters.AddWithValue("@nome", nomeTextBox.Text);
comando.Parameters.AddWithValue("@login", loginTextBox.Text);

conexao.Open();

OleDbDataReader reader = null;

reader = comando.ExecuteReader(CommandBehavior.CloseConnection);
{
if (reader.HasRows)
{
if (reader.Read())
{
if ((BtnAlterar.Checked == false))
{
MessageBox.Show("Nome ou Login já Cadastrado !", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning);
nomeTextBox.Focus();
}

Jair Souza
   - 30 mai 2014

Achei o problema, estava no BD, nos espaços entre nome e sobrenomes.
Exemplo :
João da Silva Souza.
Joãodasilvasouza, deixei assim no BD e pelo form de cadastro alterei para João da Silva Souza e funcionou perfeitamente, os nomes cadastrados eu tinha digitado diretamente no Access, não entendi porque isto acontece...mas resolveu.

O código ficou assim :

#Códigoprivate void BtnSalvar_Click(object sender, EventArgs e)
{
try
{
OleDbConnection conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Application.StartupPath + "\\BDBiblioteca.mdb");

OleDbCommand comando = new OleDbCommand("SELECT Nome, Login FROM Funcionario WHERE Nome = @nome OR Login = @login", conexao);

comando.Parameters.AddWithValue("@nome", nomeTextBox.Text);
comando.Parameters.AddWithValue("@login", loginTextBox.Text);

conexao.Open();

OleDbDataReader reader = null;

reader = comando.ExecuteReader(CommandBehavior.CloseConnection);

if ((reader.HasRows) && (reader.Read())) //se leitor tem linhas e se leitor leu.
{
MessageBox.Show("Nome ou Login já Cadastrado !", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning);
nomeTextBox.Focus();
nomeTextBox.ForeColor = Color.Red;
loginTextBox.ForeColor = Color.Red;
}
else if (senhaTextBox.Text != ConfSenhatextbox.Text)
{
MessageBox.Show("Senhas não são Iguais !", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning);
ConfSenhatextbox.Focus();
ConfSenhatextbox.ForeColor = Color.Red;
}
else
{
this.Validate();
this.funcionarioBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.bDBibliotecaDataSet);
MessageBox.Show("Registro Salvo com Sucesso !", "Salvar", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
reader.Close();
}
catch (Exception ex)
{
MessageBox.Show("" + ex.Message, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}