Usuário com melhor resposta
Ajuda com C# e sql server 2008

Pergunta
-
Olá, estou migrando de vb para c# e ando tendo algumas dificuldades para de select
con.Open();
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.
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.
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
-
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
-
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
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
-
-
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
-
-
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 ?
-
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
-
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
-
Falta atribuir a conexao ao comando.
Exemplo:
cmd.Connection = con;
- Editado Guilherme da Luz quarta-feira, 11 de dezembro de 2013 17:25
-
-
-
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();
} -
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.
- Editado Guilherme da Luz quarta-feira, 11 de dezembro de 2013 17:51
-
é 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
-
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
-