Array
(
)

Select em Csharp com banco de dados MySQL

Anderson Silva
   - 23 out 2012

Ola, sou novo em programação.
Estou cirando um programa para fazer cadastro de cliente, estou usando o Visual Studio C# com MySQL.
Esta fazendo o cadastro gravando no MySQL certinho, eu consigo lista todos os dados cadastrados de todos os clientes.
Minha duvida e como posso fazer uma pesquisa(select), e mostra no dataGridView.
Ex: cadastrei o cliente NOME:Y, CPF:1, Endereco:xx, Rua:XX. quando eu escrever no textBoxCPF "1" e clicar em pesquisa, o programa mostra no dataGridView todos os dados do cliente.
segue o codigo de botão cadastro:
private void btnCadastrar_Click(object sender, EventArgs e)
{
string Nome = txtNome.Text;
string CPF = txtCpf.Text;
string RG = txtRg.Text;
string Telefone = txtTel.Text;
string Endereco = txtEndereco.Text;
string Bairro = txtBairro.Text;
string Cidade = txtCidade.Text;
string Cep = txtCep.Text;
string Estado = txtEstado.Text;
string Placa = txtPlaca.Text;
{
//string de conecxão com o mysql
string CONFIG = ("Persist Security Info=False;server=localhost;database=bdcdc;uid=root;server=localhost;database=bdcdc;uid=root;pwd=''");
MySqlConnection Conexao = new MySqlConnection(CONFIG);
MySqlCommand Query = new MySqlCommand();
Query.Connection = Conexao;
Conexao.Open();
//string de inclusão de dados no Mysql
Query.CommandText = "INSERT INTO tbcliente(Nome,CPF,RG,Telefone,Endereco,Bairro,Cidade,Cep,Estado,Placa) VALUES(@Nome, @CPF, @RG, @Telefone, @Endereco, @Bairro, @Cidade, @Cep, @Estado, @Placa)";
Query.Parameters.AddWithValue("@Nome", Nome);
Query.Parameters.AddWithValue("@CPF", CPF);
Query.Parameters.AddWithValue("@RG", RG);
Query.Parameters.AddWithValue("@Telefone", Telefone);
Query.Parameters.AddWithValue("@Endereco", Endereco);
Query.Parameters.AddWithValue("@Bairro", Bairro);
Query.Parameters.AddWithValue("@Cidade", Cidade);
Query.Parameters.AddWithValue("@Cep", Cep);
Query.Parameters.AddWithValue("@Estado", Estado);
Query.Parameters.AddWithValue("@Placa", Placa);
Query.ExecuteNonQuery();
Query.Dispose();
MessageBox.Show("Cliente cadastrado com sucesso.", "Cadastro", MessageBoxButtons.OK, MessageBoxIcon.Information);
btnLimpar.PerformClick();
Conexao.Close();
}

segue o botão lista todos os clientes cadastrados:
private void btnCadastrados_Click(object sender, EventArgs e)
{
conexaoDataset = new DataSet();
//Define string de conexão
conexao = new MySqlConnection("Persist Security Info=False;server=localhost;database=bdcdc;uid=root;server=localhost;database=bdcdc;uid=root;pwd=''");
//Abre conecção
try
{
conexao.Open();
MySqlDataAdapter conexaoAdapter = new MySqlDataAdapter("SELECT * FROM tbcliente ORDER BY nome", conexao);
conexaoAdapter.Fill(conexaoDataset, "tbcliente");
dataGridView1.DataSource = conexaoDataset;
dataGridView1.DataMember = "tbcliente";
}
catch
{
MessageBox.Show("Impossível estabelecer conexão");
conexao.Close();
}
}

segue o botão pesquisa de cliente:

private void btnPesquisa_Click(object sender, EventArgs e)
{
conexaoDataset = new DataSet();
conexao = new MySqlConnection("Persist Security Info=False;server=localhost;database=bdcdc;uid=root;server=localhost;database=bdcdc;uid=root;pwd=''");
try
{
conexao.Open();
MySqlDataAdapter conexaoAdapter = new MySqlDataAdapter("SELECT Nome,CPF,RG,Telefone,Endereco,Bairro,Cidade,CepEstado,Placa, FROM tbcliente WHERE CPF =" + txtCpf.Text, conexao);
conexaoAdapter.Fill(conexaoDataset, "tbcliente");
dataGridView1.DataSource = conexaoDataset;
dataGridView1.DataMember = "tbcliente";
}
catch
{
MessageBox.Show("Impossível estabelecer conexão");
conexao.Close();
}
}
Desde já agradeço!!!
(não tenho muita experiencia em programação)

Tiago
|
MVP
Pontos: 120
    23 out 2012

Opa, vamos la... Para colocar no gridview é necessário alguns passos:

#Código

1-Crie um método que retorne uma lista ou um data table dos dados que você deseja mostrar no grid:

public DataTable ListarClientes(){
Datatable dt = new Datatable();

return dt

}

2- Use a propriedade DataSource do gridview para receber essas informações:

NomeDoGrid.DataSource=ListarClientes()

3-Chame o método DataBind(), ele será responsável por exibir os valores  no seu grid.

NomeDoGrid.DataBind();


Espero ter ajudado.

Anderson Silva
   - 24 out 2012

Então eu estou fazendo (eu acho) do jeito certo!! mas quando eu clico no botão pesquisa ele não mostra no datagrid!

no textBox eu digito o CPF para fazer a pesquisa e retornar os dados do cliente, mas não esta mostrando :\ ...

codigo:
{
conexaoDataset = new DataSet();
conexao = new MySqlConnection("Persist Security Info=False;server=localhost;database=bdcdc;uid=root;server=localhost;database=bdcdc;uid=root;pwd=''");

try
{
conexao.Open();
MySqlDataAdapter conexaoAdapter = new MySqlDataAdapter("SELECT Nome,CPF,RG,Telefone,Endereco,Bairro,Cidade,CepEstado,Placa, FROM tbcliente WHERE CPF =" + txtCpf.Text, conexao);
conexaoAdapter.Fill(conexaoDataset, "tbcliente");
dataGridView1.DataSource = conexaoDataset;
dataGridView1.DataMember = "tbcliente";

Joel Rodrigues
   - 24 out 2012

Experimente trocar o DataSet por DataTable, como foi dito acima. Com isso, não precisará de defini a propriedade DataMember.
Boa sorte.

Robson Robsonalves.net
   - 24 out 2012

Anderson Cicero Feitosa Silva, Boa Tarde,
no final do código incrementa o seguinte:

NomeDoSeuGridView.DataBind();

O 'DataBind' é resposável pelo Bound das informações encontradas no DataSource e com isso é enviada para a página.

Abraços.

Anderson Silva
   - 24 out 2012

Eu tentei coloca de varias formas mas não consegui.. :( não sei se estou fazendo do jeito certo...
Com "DataBind e Datatable":

public DataTable pesquisaDatatable;

private void btnPesquisa_Click(object sender, EventArgs e)
{

pesquisaDatatable = new DataTable();
conexao = new MySqlConnection("Persist Security Info=False;server=localhost;database=bdcdc;uid=root;server=localhost;database=bdcdc;uid=root;pwd=''");

try
{

conexao.Open();
MySqlDataAdapter conexaoAdapter = new MySqlDataAdapter("SELECT Nome, CPF, RG, Telefone, Endereco, Bairro, Cidade, Cep, Estado, Placa, FROM * tbcliente WHERE CPF =" + txtCpf.Text, conexao);
conexaoAdapter.Fill(pesquisaDatatable);
dataGridView1.DataSource = pesquisaDatatable;
dataGridView1.DataBind();

da esse erro tbm> Error 2'System.Windows.Forms.DataGridView' does not contain a definition for 'DataBind' and no extension method 'DataBind' accepting a first argument of type 'System.Windows.Forms.DataGridView' could be found (are you missing a using directive or an assembly reference?) C:\Documents and Settings\Administrador\Meus documentos\Visual Studio 2010\Projects\Cadastro\Cadastro\Form3.cs228 27 Cadastro

Tiago
|
MVP
Pontos: 120
    24 out 2012

Boa noite, procure depurar a aplicação assim que executar o comando e você passar as informações para um DATATABLE... Veja no debug se a propriedade Rows esta zerada. Se estiver é porquê é alguma coisa na consulta dos dados.

Robson Robsonalves.net
   - 25 out 2012

Desculpa foi erro meu, o DataBind é uma necessidade para quem cria GridView utilizando ASP.Net.

Existe um * depois do From, se isso estiver na sua Query já é um erro, mas aparentemente esta tudo certo.

Valter Furtado
   - 25 out 2012

olhando seu código de insert e o select, o seu select tá errado...
veja que você colocou CepEstado (acredito que fosse Cep, Estado,...) e no fim antes do from tem uma virgula sobrando.

Valter Furtado
   - 25 out 2012


Citação:
olhando seu código de insert e o select, o seu select tá errado...
veja que você colocou CepEstado (acredito que fosse Cep, Estado,...) e no fim antes do from tem uma virgula sobrando.


só pra completar... cpf é uma string? se for você concatenou errado... deveria ficar...
"...WHERE CPF ='" + txtCpf.Text + "'",...

Moisés Gonçalves
   - 25 out 2012


Citação:

Citação:
olhando seu código de insert e o select, o seu select tá errado...
veja que você colocou CepEstado (acredito que fosse Cep, Estado,...) e no fim antes do from tem uma virgula sobrando.


só pra completar... cpf é uma string? se for você concatenou errado... deveria ficar...
"...WHERE CPF ='" + txtCpf.Text + "'",...


Utilize parâmetros para este tipo de operação para evitar sql injection.

Tiago
|
MVP
Pontos: 120
    25 out 2012

Moisés está certo, é uma má prática de programação utilizar o sql no c# dessa forma. ai abaixo segue um exemplo

#Código

SqlParameter [] param_sql = new SqlParameter[2];
param_sql[0]= new SqlParameter("@nomeparametro",valor_do_parametro); 
param_sql[1]= new SqlParameter("@nomeparametro",valor_do_parametro); 



Depois é só adicionar a classe SqlCommand.

Espero ter ajudado.

Anderson Silva
   - 25 out 2012

Arrumei alguns erros que tinha, mas mesmo assim não rolo :(

Sim o CPF e uma string: eu coloquei assim,

public DataTable pesquisaDatatable;

private void btnPesquisa_Click(object sender, EventArgs e)
{

pesquisaDatatable = new DataTable();
conexao = new MySqlConnection("Persist Security Info=False;server=localhost;database=bdcdc;uid=root;server=localhost;database=bdcdc;uid=root;pwd=''");
try
{

conexao.Open();
MySqlDataAdapter conexaoAdapter = new MySqlDataAdapter("SELECT Nome, CPF, RG, Telefone, Endereco, Bairro, Cidade, Cep, Estado, Placa FROM * tbcliente WHERE CPF ="+ txtCpf.Text + "",conexao);
conexaoAdapter.Fill(pesquisaDatatable);
dataGridView1.DataSource = pesquisaDatatable;
dataGridView1.DataMember = "tbcliente";

agora não deu erro nenhum, mas não mostra no Grid os dados do cliente...

Tiago
|
MVP
Pontos: 120
    25 out 2012



Opa, faça o seguinte coloque o debug nessa linha:
#Código

dt=conexaoAdapter.Fill(pesquisaDatatable)

logo depois aperte F10 para pular uma linha, e verifique se este DataTable está te retornando algo... se não estiver é a consulta que está montada de forma incorreta..
#Código
conexao.Open();
MySqlDataAdapter conexaoAdapter = new MySqlDataAdapter("SELECT Nome, CPF, RG, Telefone, Endereco, Bairro, Cidade, Cep, Estado, Placa FROM * tbcliente WHERE CPF ="+ txtCpf.Text + "",conexao);
DataTable dt = new DataTable();//CRie um DataTable
dt=conexaoAdapter.Fill(pesquisaDatatable);//Coloque o datatable para receber o preenchimento via dataadapter
dataGridView1.DataSource = pesquisaDatatable;
dataGridView1.DataMember = "tbcliente";

Espero que isso ajude

Valter Furtado
   - 25 out 2012


Citação:
Arrumei alguns erros que tinha, mas mesmo assim não rolo :(

Sim o CPF e uma string: eu coloquei assim,

public DataTable pesquisaDatatable;

private void btnPesquisa_Click(object sender, EventArgs e)
{

pesquisaDatatable = new DataTable();
conexao = new MySqlConnection("Persist Security Info=False;server=localhost;database=bdcdc;uid=root;server=localhost;database=bdcdc;uid=root;pwd=''");
try
{

conexao.Open();
MySqlDataAdapter conexaoAdapter = new MySqlDataAdapter("SELECT Nome, CPF, RG, Telefone, Endereco, Bairro, Cidade, Cep, Estado, Placa FROM * tbcliente WHERE CPF ="+ txtCpf.Text + "",conexao);
conexaoAdapter.Fill(pesquisaDatatable);
dataGridView1.DataSource = pesquisaDatatable;
dataGridView1.DataMember = "tbcliente";

agora não deu erro nenhum, mas não mostra no Grid os dados do cliente...


tem um FROM * tblcliente
é isso?
nao neh rs
* from...

Alisson
|
MVP
Pontos: 3400
    25 out 2012

Você verificou se está abrindo a query nesse caso, pois você tem que pegar as informações que vem de um dataset aberto e jogar no grid.