ERRO DE SQL EXCEPTION
Olá. Eu estudo visual basic em minha escola á uns 3 anos.
E nunca aconteceu esse erro comigo.
Onde eu cadastro um cliente e ele diz que existe chave duplicada e alguma coisa relacionada á sql exception.
O incrÃvel é que ele cadastra...
Alguém pode me ajudar?
E nunca aconteceu esse erro comigo.
Onde eu cadastro um cliente e ele diz que existe chave duplicada e alguma coisa relacionada á sql exception.
O incrÃvel é que ele cadastra...
Alguém pode me ajudar?
Tira um printscreen e joga aqui pra gente poder entender isso melhor.
Nos mostra o seu código para sabermos como você esta relacionando!
Passe apenas o trecho que realiza o cadastro não precisa enviar o projeto
Passe apenas o trecho que realiza o cadastro não precisa enviar o projeto
Acontece isso.... porém vou checar no banco de dados o cadastro foi efetuado!
Procurei em outros fóruns e aqui também... parece que meu servidor está sendo corrompido, sera isso meso?
Procurei em outros fóruns e aqui também... parece que meu servidor está sendo corrompido, sera isso meso?
O motivo de acontecer isso está explicado aqui, veja:
http://support.microsoft.com/kb/970507/pt-br
http://support.microsoft.com/kb/970507/pt-br
Sabe como resolver isso ?
Eu li tudo, fiz alguns procedimentos e nada aconteceu...
persiste o erro.
Eu li tudo, fiz alguns procedimentos e nada aconteceu...
persiste o erro.
Amigo, tenta utilizar o código abaixo.
O que está acontecendo, você está executando a query, depois você está executando um reader do insert, acho que isto não está correto.
A sequencia lógica do seu código está meio bagunçada, você está informando o sqlCommand no inÃcio passando a variável sql como parâmetro, sendo que você informa a sentença depois. Após ter informado a sentença você aplica a mesma ao commandText, você está sobrescrevendo todo seu código.
Outra dica é você utilizar parâmetros no seu insert. ex:
sql = [Ô]Insert into tabela(codigo, nome) values (@codigo, @nome)
con.Open()
dim comm as new SqlCommand(sql, conn)
comm.Parameters.Add([Ô]@codigo[Ô], txtCodigo.text)
comm.Parameters.Add([Ô]@nome[Ô], txtNome.text)
comm.ExecuteNonQuery()
Obs: Você pode utilizar uma classe para as entidades e criar uma classe CRUD com insert, update, delete, passando somente a classe entidade como parâmetro.
Dim conn as New SqlConnection(cx)
sql = [Ô]sua sentença[Ô] [ô]Trocar pela sua query
conn.Open()
dim comm as new SqlCommand(sql, conn)
comm.ExecuteNonQuery()
O que está acontecendo, você está executando a query, depois você está executando um reader do insert, acho que isto não está correto.
A sequencia lógica do seu código está meio bagunçada, você está informando o sqlCommand no inÃcio passando a variável sql como parâmetro, sendo que você informa a sentença depois. Após ter informado a sentença você aplica a mesma ao commandText, você está sobrescrevendo todo seu código.
Outra dica é você utilizar parâmetros no seu insert. ex:
sql = [Ô]Insert into tabela(codigo, nome) values (@codigo, @nome)
con.Open()
dim comm as new SqlCommand(sql, conn)
comm.Parameters.Add([Ô]@codigo[Ô], txtCodigo.text)
comm.Parameters.Add([Ô]@nome[Ô], txtNome.text)
comm.ExecuteNonQuery()
Obs: Você pode utilizar uma classe para as entidades e criar uma classe CRUD com insert, update, delete, passando somente a classe entidade como parâmetro.
O Guimoraes123 tem razão. Na verdade, como as strings são estáticas, elas não podem ser passadas posteriormente como um ponteiro de referência, pois toda string é única dentro do sistema. Por isso que não é correto passar a string [Ô]sql[Ô] da forma que colocou.
A ordem corretar deveria ser a seguinte:
sql = [Ô]insert into cliente ...[Ô]
dim conn As SqlConnection = New SqlConnection(cx)
dim comm As SqlCommand = New SqlCommand(sql, conn)
dim dta As SqlDataAdapter = New SqlDataAdapter(comm)
conn.Open()
comm.ExecuteNonQuery()
dim dr As SqlDataReader = comm.ExecuteReader
A ordem corretar deveria ser a seguinte:
sql = [Ô]insert into cliente ...[Ô]
dim conn As SqlConnection = New SqlConnection(cx)
dim comm As SqlCommand = New SqlCommand(sql, conn)
dim dta As SqlDataAdapter = New SqlDataAdapter(comm)
conn.Open()
comm.ExecuteNonQuery()
dim dr As SqlDataReader = comm.ExecuteReader
é isso ai JABA, mais só tem um detalhe que o ICAROF deve saber.
Não é necessário chamar o [Ô]ExecuteNonQuery[Ô] e o [Ô]ExecuteReader[Ô] na mesma instrução, pois cada um tem finalidades distintas.
Para o insert, update, delete, se utiliza somente o [Ô]ExecuteNonQuery[Ô] e o [Ô]ExecuteReader[Ô] para Selects.
O DataAdapter é utilizado para preencher um dataSet ou datatTable por exemplo, não se utiliza para insert, update, delete.
Resumindo, tem código sobrando ai, sem necessidade, e futuramente pode dar dor de cabeça.
Abraços
Não é necessário chamar o [Ô]ExecuteNonQuery[Ô] e o [Ô]ExecuteReader[Ô] na mesma instrução, pois cada um tem finalidades distintas.
Para o insert, update, delete, se utiliza somente o [Ô]ExecuteNonQuery[Ô] e o [Ô]ExecuteReader[Ô] para Selects.
O DataAdapter é utilizado para preencher um dataSet ou datatTable por exemplo, não se utiliza para insert, update, delete.
Resumindo, tem código sobrando ai, sem necessidade, e futuramente pode dar dor de cabeça.
Abraços
Perfeito Guimoraes123! é isso aÃ!
ICAROF, já conseguiu sanar as suas dúvidas? Se sim, por favor, encerre o tópico.
ICAROF, já conseguiu sanar as suas dúvidas? Se sim, por favor, encerre o tópico.
Faça seu login para responder