Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

felipeamaral

[Resolvido] MS Access + C#

Recommended Posts

Galera, é o seguinte...

 

Estou começando na área e estou praticando algumas coisas, como por exemplo acesso a dados.

 

Estou com algumas duvidas pra fazer uma telinha simples de login, onde digita o usuario e a senha e e apareça uma msgbox dizendo que esta logado

 

bom, declaro isso;

 

private OleDbConnection  Conn;
		private OleDbDataAdapter da;
		private OleDbDataReader myReader;

e na hora de fazer o método, eu impaco no if... tipo... se o que o cara digitou for igual ao que esta no banco... aparece a msg box logado... caso contrario msgbox falhou

 

private void acessa()
		{
//caminho do banco
			Conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=login.mdb");
			
//abrindo conexao com o banco
			Conn.Open();

				da = new OleDbDataAdapter("Select usuario, senha From usuario Where usuario =" + txtusuario.Text + "AND   senha =" + txtsenha.Text, Conn);

//aqui o problema.. nao sei como fazer essa comparação
			if (nao sei o que por aki ^^)
			{

				
			}
		}

se alguem poder me ajudar galera

 

abraços ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

felipeamaral seja bem vindo ao Fórum iMasters, de uma olhada em nossas regras: Regras do Fórum iMasters

 

Pequeno exemplo que peguei na net mesmo:

SqlConnection conn = new SqlConnection(suaStringDeConexao);
SqlCommand comm = new SqlCommand("Select count(*) From SuaTabela Where usuario = @usuario And senha = @senha", conn);

comm.Parameters.Add("@usuario", SqlDbType.TipoDoCampo).Value = seuTextBoxNomeUsuario.Text;
comm.Parameters.Add("@senha", SqlDbType.TipoDoCampo).Value = seuTextBoxSenha.Text;

conn.Open();
int i = (int) comm.ExecuteScalar();

// Se i for maior que zero é porque achou o usuario/senha, senao não acho
if (i < 0)
   MessageBox.Show("Ok");
else
   MessageBox.Show("Usuario ou Senha incorretos");

conn.Close();

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

obrigado quintelab,

 

mas o problema é que o banco é ms-access, e esse problema que estou tento é justamente na parte do ExecuteScalar()

 

nao sei como fazer a comparacao dos dados que o usuario digitou para os que estao no banco

 

creio que ate a query esta certa, mas nao sei como "validar" ela

 

obrigado pela ajuda

----------------------------------------

*EDIT*

bom, tentei adapatar essa ajuda do quint para a "linguagem" oledb... consegui, compilou tudo certo, sem erro...

 

mas ao clicar no botao, que recebe o metodo acessa, ele vai ate o codigo e diz que no metodo ExecuteReader qto no ExecuteScalar, diz que nenhum valor foi fornecido para um ou mais parametros, mas ele nao aceita parametros nos dois metodos

segue o codigo

rivate void acessa()
		{
			Conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=login.mdb");
			

			Conn.Open();

			//da = new OleDbDataAdapter("Select usuario, senha From usuario Where usuario =" + txtusuario.Text + "AND senha =" + txtsenha.Text, Conn);

			string select = "Select usuario, senha From usuario Where usuario = " + txtusuario.Text + " AND senha = " + txtsenha.Text;

			teste = new OleDbCommand(select, Conn);


			int i = (int)teste.ExecuteScalar();

			if (i < 0)
			{
				MessageBox.Show("LOGADO");
			}

			else
			{
				MessageBox.Show("FALHA");
				Conn.Close();
			}


			//myReader = teste.ExecuteReader();

			//if (myReader.HasRows)
			//{
			//	MessageBox.Show("LOGADO");
			//}

			//else
			//{
			//	MessageBox.Show("FALHA");
			//	myReader.Close();
			//	Conn.Close();
			//}
		}

-----------------

*EDIT 2*

 

Galera, desculpa denovo a edição.. mas aqui esta, finalmente consegui :)

 

faltava realmente os parametros, que foram adicionados... e no lugar do ExecuteScalar, coloquei o Reader, pois creio o seguinte, nao tenho certeza, se alguem tiver mais certeza e eu tive errado postem plz ^^

 

com ExecuteScalar funcionaria com o DataSet, você precisaria utilizar o metodo Fill para "enche-lo", ja o Reader nao precisa

creio eu mas enfim consegui.. e esta ai o codigo para aproveitarem ;)

 

private void acessa()
		{
			Conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=login.mdb");
			

			Conn.Open();

			//da = new OleDbDataAdapter("Select usuario, senha From TESTE Where usuario =" + txtusuario.Text + "AND senha =" + txtsenha.Text, Conn);

			string select = "SELECT usuario, senha FROM TESTE WHERE usuario = " + txtusuario.Text + " AND senha = " + txtsenha.Text;

			teste = new OleDbCommand(select, Conn);

			teste.Parameters.Add(new OleDbParameter("@usuario", OleDbType.VarChar)).Value = txtusuario.Text;
			teste.Parameters.Add(new OleDbParameter("@senha", OleDbType.VarChar)).Value = txtsenha.Text;

			//int i = (int)teste.ExecuteScalar();

			//if (i < 0)
			//{
			//	MessageBox.Show("LOGADO");
			//}

			//else
			//{
			//	MessageBox.Show("FALHA");
			//	Conn.Close();
			//}


			myReader = teste.ExecuteReader();

			if (myReader.HasRows)
			{
				MessageBox.Show("LOGADO");
			}

			else
			{
				MessageBox.Show("FALHA");
				myReader.Close();
				Conn.Close();
			}
		}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na realidade o ExecuteScalar funciona somente para retornar um campo e um único registro, por exemplo, um Select COUNT.

Quando precisa retornar mais de um campo ou mais de uma linha ou ambos deve se usar o ExecuteReader.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.