none
Ajuda com C# e sql server 2008 RRS feed

  • Pergunta

  • Olá, estou migrando de vb para c# e ando tendo algumas dificuldades para de select
    meu problema é o seguinte
      Call Conecta_BD()
                cmd.CommandText = "select cpf from cliente where cpf = '" & txtcpf.Text & "'"
                dr = cmd.ExecuteReader()

                If dr.Read Then
                    MsgBox("CPF já existente em nosso bancos de dados, por favor escolha outro CPF", MsgBoxStyle.Information, "Pet Show")

    esse comando  em vb checa se o cpf digitado na txtbox cpf ja existe no meu banco de dados, se sim ele vai exibir a msgbox senão ele vai continuar o processo de cadastro.

    agora estou fazendo um projeto de livraria em c#
    e quero fazer a mesma coisa, mas no lugar do cpf quero checar o nome do livro, meu código está assim.

              con.Open();
                        cmd = new SqlCommand("select nomelivro from livros where nomelivro = ('" + txtnomelivro + "')");
                 rd =  cmd.ExecuteNonQuery();
               if dr.Read {
               MessageBox.Show("Esse livro ja está cadastrado em nossa livraria");
               
               }
                    con.close

             porem não está funcionando, fica dando um tal de erro "cannot implicity convert type 'int' to system.data.sqlclient.sqldatareader no "cmd.executenoquery"
    Se poder me dar um exemplo de como fazer esse tipo de selec
    ou me ajudar resolver esse problema ficaria agradecido.
    quarta-feira, 11 de dezembro de 2013 13:29

Respostas

  • SqlDataReader reader = cmd.ExecuteReader(); if (reader.Read()) { MessageBox.Show("Esse livro ja está cadastrado em nossa livraria"); }

    reader.Close();




    • Editado Guilherme da Luz quarta-feira, 11 de dezembro de 2013 13:46
    • Marcado como Resposta Rods Leal quarta-feira, 11 de dezembro de 2013 15:59
    quarta-feira, 11 de dezembro de 2013 13:35
  • seu código ajudou
    agora só tá dando erro no "cmd.executenonquery
    aparece isso :
    "cannot implicity convert type 'int' to system.data.sqlclient.sqldatareader"

    Meu você está tentando Executar uma query fazer um insert ou update ao invés de fazer a leitura olhe como o Guilherme fez não seria cmd.ExecuteNonQuery() e sim :

    cmd.ExecuteReader();
    Igual no exemplo acima do Guilherme.

    • Marcado como Resposta Rods Leal quarta-feira, 11 de dezembro de 2013 15:59
    quarta-feira, 11 de dezembro de 2013 13:55
  • Segue uma sugestão, acho que vai funcionar, para essa verificação não é necessário utilizar o DataReader.

    con.Open();
    
                cmd = new SqlCommand("select count(1) from livros where nomelivro = ('" + txtnomelivro + "')");
                cmd.Connection = con;
                int quantidade = (int)cmd.ExecuteScalar();
    
                if (quantidade > 0)
                {
                    con.Close();
                    MessageBox.Show("Esse livro ja está cadastrado em nossa livraria");
                }
    
                else
                {
                    cmd = new SqlCommand("insert into livros (nomelivro, datalanç, nomeautor, precolivro, quantlivro, imglivro, comentlivro, volumelivro, generolivro )  values ('" + txtnomelivro.Text + "', '" + txtlanlivro.Text + "', '" + txtnomeautor.Text + "', '" + txtprecolivro.Text + "','" + txtquantidade.Text + "','" + m + "', '" + txtcoment.Text + "', '" + txtvolume.Text + "', '" + cbgenero.Text + "')", con);
                    cmd.ExecuteNonQuery();
                    con.Close();
                    MessageBox.Show("Livro Cadastrado com Sucesso");
    
                    txtnomelivro.Text = null;
                    txtlanlivro.Text = null;
                    txtnomeautor.Text = null;
                    txtprecolivro.Text = null;
                    txtquantidade.Text = null;
                    txtcoment.Text = null;
                    txtvolume.Text = null;
                    cbgenero.Text = null;
                    pictureBox1.Image = null;
                    txtnomelivro.Focus();
    
                }


    • Editado Guilherme da Luz quarta-feira, 11 de dezembro de 2013 18:27
    • Marcado como Resposta Rods Leal quarta-feira, 11 de dezembro de 2013 22:31
    quarta-feira, 11 de dezembro de 2013 18:19

Todas as Respostas

  • SqlDataReader reader = cmd.ExecuteReader(); if (reader.Read()) { MessageBox.Show("Esse livro ja está cadastrado em nossa livraria"); }

    reader.Close();




    • Editado Guilherme da Luz quarta-feira, 11 de dezembro de 2013 13:46
    • Marcado como Resposta Rods Leal quarta-feira, 11 de dezembro de 2013 15:59
    quarta-feira, 11 de dezembro de 2013 13:35
  • seu código ajudou
    agora só tá dando erro no "cmd.executenonquery
    aparece isso :
    "cannot implicity convert type 'int' to system.data.sqlclient.sqldatareader"
    • Editado Rods Leal quarta-feira, 11 de dezembro de 2013 13:52
    quarta-feira, 11 de dezembro de 2013 13:52
  • seu código ajudou
    agora só tá dando erro no "cmd.executenonquery
    aparece isso :
    "cannot implicity convert type 'int' to system.data.sqlclient.sqldatareader"

    Meu você está tentando Executar uma query fazer um insert ou update ao invés de fazer a leitura olhe como o Guilherme fez não seria cmd.ExecuteNonQuery() e sim :

    cmd.ExecuteReader();
    Igual no exemplo acima do Guilherme.

    • Marcado como Resposta Rods Leal quarta-feira, 11 de dezembro de 2013 15:59
    quarta-feira, 11 de dezembro de 2013 13:55
  • ops, não prestei atenção nisso, não vi que tinha que mudar o nonquery pelo reader
    funcionou aqui
    Brigadão a todos
    quarta-feira, 11 de dezembro de 2013 14:07
  • aproveitando o tópico
    agora tá dando um tal de :
    "executereader, propriedade connection não foi inicializada"

    o código tá assim : 

                    

     {
                    con.Open();

                  cmd = new SqlCommand("select nomelivro from livros where nomelivro = ('" + txtnomelivro + "')");

               sqldatareader  reader =  cmd.ExecuteReader();
                 if (reader.Read ())
                 {
                     MessageBox.Show("Esse livro ja está cadastrado em nossa livraria");

                     con.Close();
                 }

    falta o que ?

    quarta-feira, 11 de dezembro de 2013 16:56
  • Este erro é devido ao objeto SqlConnection não ser instanciado por ex :

    //exemplo : sqlconnection deve ser instanciado
    SqlConnection con = new SqlConnection("CONNECTIONSTRING");

    • Sugerido como Resposta Guilherme da Luz quarta-feira, 11 de dezembro de 2013 17:15
    quarta-feira, 11 de dezembro de 2013 17:04
  • eu fiz a conexão em outro lugar  ó
      SqlConnection con = new SqlConnection("Integrated Security=SSPI; Persist Security Info=False; User ID=sa; Password=senha;Initial Catalog=livraria; Data Source=localhost");
            SqlCommand cmd;
            SqlDataReader reader;
    declarei variaveis e fiz a conexão em um lugar

    e to tentando fazer o select em um botão

    é isso que você tá falando?
    • Editado Rods Leal quarta-feira, 11 de dezembro de 2013 17:15
    quarta-feira, 11 de dezembro de 2013 17:15
  • Falta atribuir a conexao ao comando.

    Exemplo:

    cmd.Connection = con;
    


    quarta-feira, 11 de dezembro de 2013 17:20
  • e eu boto esse        " cmd.Connection = con; "aonde?

    quarta-feira, 11 de dezembro de 2013 17:32
  • Antes do ExecuteReader()
    quarta-feira, 11 de dezembro de 2013 17:33
  • aquele erro parou
    agora fala que a conexão não foi fechada 
    esse erro dá no con.open do insert
    eu tentei mudar o con.close mas continua falando que não foi fechada
                    con.Open();
                
                  cmd = new SqlCommand("select nomelivro from livros where nomelivro = ('" + txtnomelivro + "')");
                  cmd.Connection = con;
                  SqlDataReader  reader =  cmd.ExecuteReader();
         
                 if (reader.Read ())

                 {
                     MessageBox.Show("Esse livro ja está cadastrado em nossa livraria");
                     
                     
                 }
             
                 else
                 {


                     con.Open();
                     cmd = new SqlCommand("insert into livros (nomelivro, datalanç, nomeautor, precolivro, quantlivro, imglivro, comentlivro, volumelivro, generolivro )  values ('" + txtnomelivro.Text + "', '" + txtlanlivro.Text + "', '" + txtnomeautor.Text + "', '" + txtprecolivro.Text + "','" + txtquantidade.Text + "','" + m + "', '" + txtcoment.Text + "', '" + txtvolume.Text + "', '" + cbgenero.Text + "')", con);
                     cmd.ExecuteNonQuery();
                     con.Close();
                     MessageBox.Show("Livro Cadastrado com Sucesso");
                   
                     txtnomelivro.Text = null;
                     txtlanlivro.Text = null;
                     txtnomeautor.Text = null;
                     txtprecolivro.Text = null;
                     txtquantidade.Text = null;
                     txtcoment.Text = null;
                     txtvolume.Text = null;
                     cbgenero.Text = null;
                     pictureBox1.Image = null;
                     txtnomelivro.Focus();
                    
                 }
    quarta-feira, 11 de dezembro de 2013 17:41
  • Na verdade, está muito confuso o seu código.

    Note que você só está fechando a conexão no else, e também depois do seu if, você não pode esquecer de fechar o SqlDataReader.

    E como isso são coisas bem básicas do ADO.NET, quando tiver um tempo sugiro que veja a sequencia de artigos do macoratti, assim você pode fixar bem como funciona.

    http://www.macoratti.net/08/11/c_adn_1.htm

     
    quarta-feira, 11 de dezembro de 2013 17:49
  • é que o primeiro if
    é o select pra checar se existe o nome do livro no banco de dados
    se não existir ele vai abrir outra conexão pra da insert no livro que está sendo cadastrado
    então antes de abrir essa conexão eu fecho a do select
    qual comando fecha o sqldatareader?
    e onde você acha que devo botar o con.close?
    • Editado Rods Leal quarta-feira, 11 de dezembro de 2013 17:56
    quarta-feira, 11 de dezembro de 2013 17:52
  • Segue uma sugestão, acho que vai funcionar, para essa verificação não é necessário utilizar o DataReader.

    con.Open();
    
                cmd = new SqlCommand("select count(1) from livros where nomelivro = ('" + txtnomelivro + "')");
                cmd.Connection = con;
                int quantidade = (int)cmd.ExecuteScalar();
    
                if (quantidade > 0)
                {
                    con.Close();
                    MessageBox.Show("Esse livro ja está cadastrado em nossa livraria");
                }
    
                else
                {
                    cmd = new SqlCommand("insert into livros (nomelivro, datalanç, nomeautor, precolivro, quantlivro, imglivro, comentlivro, volumelivro, generolivro )  values ('" + txtnomelivro.Text + "', '" + txtlanlivro.Text + "', '" + txtnomeautor.Text + "', '" + txtprecolivro.Text + "','" + txtquantidade.Text + "','" + m + "', '" + txtcoment.Text + "', '" + txtvolume.Text + "', '" + cbgenero.Text + "')", con);
                    cmd.ExecuteNonQuery();
                    con.Close();
                    MessageBox.Show("Livro Cadastrado com Sucesso");
    
                    txtnomelivro.Text = null;
                    txtlanlivro.Text = null;
                    txtnomeautor.Text = null;
                    txtprecolivro.Text = null;
                    txtquantidade.Text = null;
                    txtcoment.Text = null;
                    txtvolume.Text = null;
                    cbgenero.Text = null;
                    pictureBox1.Image = null;
                    txtnomelivro.Focus();
    
                }


    • Editado Guilherme da Luz quarta-feira, 11 de dezembro de 2013 18:27
    • Marcado como Resposta Rods Leal quarta-feira, 11 de dezembro de 2013 22:31
    quarta-feira, 11 de dezembro de 2013 18:19
  • ok. vou tentar aqui
    obrigado pela ajuda e paciência o/
    quarta-feira, 11 de dezembro de 2013 22:31