• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Pt Freelancer

Remover dados de SQL

14 mensagens neste tópico

Boas, estou com um problema num código em que tento eliminar uma linha de dados numa base SQL

O código:

Imports System.Data.SqlClient
Public Class frmeliminarplantas

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim ligacao As SqlConnection
        Dim linhas As Integer = 0
        Dim cmdremover As SqlCommand
        Try

            ligacao = New SqlConnection("Data Source=.\SQLEXPRESS;" & _
            "AttachDbFilename='C:\Users\David\Desktop\CVB - Contabilidade\CVB-Contabilidade\CVB-Contabilidade\plantas.mdf';" & _
            "Integrated Security=True;Connect Timeout=30;" & _
            "User Instance=True")
            cmdremover = New SqlCommand("DELETE FROM Plantas " & " SET Nome = @nome,Qualidade = @qualidade,Preço = @preço, Designação = @des" & "Where Designação = @des")

            cmdremover.Parameters.Add("@nome", SqlDbType.VarChar, 255).Value = txtnome.Text()
            cmdremover.Parameters.Add("@qualidade", SqlDbType.VarChar, 255).Value = txtqua.Text()
            cmdremover.Parameters.Add("@preço", SqlDbType.VarChar, 255).Value = txtpre.Text()
            cmdremover.Parameters.Add("@des", SqlDbType.VarChar, 255).Value = txtdes.Text()

            ligacao.Open()
            cmdremover.ExecuteNonQuery()

        Catch ex As Exception
            MsgBox("não deu")
        End Try

O que eu queria aqui fazer era quando o utilizador quer eliminar uma linha na base de dados que contem: nome, qualidade e preço. O utilizador bastava por a sua designação. Ou seja eu queria eliminar a linha com aquela designação.

Neste momento e com este código não sou capaz de eliminar nada.

Ps: Já li a 6 edição da revista mas não foi capaz de resolver o problema.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Retira o " SET Nome = @nome,Qualidade = @qualidade,Preço = @preço, Designação = @des" que não faz parte do DELETE.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas TheDark.

Fiz o que sugeriste mas o problema continua

Novo código

Imports System.Data.SqlClient
Public Class frmeliminarplantas

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim ligacao As SqlConnection
        Dim linhas As Integer = 0
        Dim cmdremover As SqlCommand
        Try

            ligacao = New SqlConnection("Data Source=.\SQLEXPRESS;" & _
            "AttachDbFilename='C:\Users\David\Desktop\CVB - Contabilidade\CVB-Contabilidade\CVB-Contabilidade\plantas.mdf';" & _
            "Integrated Security=True;Connect Timeout=30;" & _
            "User Instance=True")
            cmdremover = New SqlCommand("DELETE FROM Plantas " & "Where Designação = @des")
            cmdremover.Parameters.Add("@des", SqlDbType.VarChar, 255).Value = txtdes.Text()

            ligacao.Open()
            cmdremover.ExecuteNonQuery()

        Catch ex As Exception
            MsgBox("n deu")
        End Try







    End Sub
End Class

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porque não utilizas o txtdes.Text directamente na string em vez do parâmetro @des?

E qual é a informação que dá? Ou não dá nenhuma?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Directamente na string? Como é que depois eu relaciono com a texbox?

Em relação ao erro não aparece nada, somente a msgbox a diz "n da" ou seja o try não bem sucedido certo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porque não utilizas o txtdes.Text directamente na string em vez do parâmetro @des?

Assim impede Sql Injection.

Pt freelancer. Mete a fazer antes MsgBox(ex.message) para ver qual o erro que dá.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas Betavsky

O erro que deu foi o seguinte

ExecuteNonQuery: A propriedade Connection não foi incicializada

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois falta-te passar a connection pro command.

cmdremover = New SqlCommand("DELETE FROM Plantas Where Designação = @des", ligacao)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado já está a funcionar!!

Podes-me explica o que ", ligacao" faz?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Código final

Imports System.Data.SqlClient
Public Class frmeliminarplantas

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim ligacao As SqlConnection
        Dim linhas As Integer = 0
        Dim cmdremover As SqlCommand
        Try

            ligacao = New SqlConnection("Data Source=.\SQLEXPRESS;" & _
            "AttachDbFilename='C:\Users\David\Desktop\CVB - Contabilidade\CVB-Contabilidade\CVB-Contabilidade\plantas.mdf';" & _
            "Integrated Security=True;Connect Timeout=30;" & _
            "User Instance=True")
            cmdremover = New SqlCommand("DELETE FROM Plantas " & "Where Designação = @des", ligacao)
            cmdremover.Parameters.Add("@des", SqlDbType.VarChar, 255).Value = txtdes.Text()

            ligacao.Open()
            cmdremover.ExecuteNonQuery()

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

Ainda não entendi o que querem dizer com

Porque não utilizas o txtdes.Text directamente na string em vez do parâmetro @des?
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Era para usares

cmdremover = New SqlCommand("DELETE FROM Plantas " & "Where Designação = " & txtdes.Text())

mas o Betovsky já explicou porque não deve ser feito como eu disse:

Assim impede Sql Injection.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

podes fazer por exemplo

dim sql as new string = "Delete from plantas where designacao = '" & textbox.text & "'"

dim cmd as new sqlclient.sqlcommand(sql,ligacao)

cmd.execute.......

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu uso storage qd estou a trabalhar com muitas tabelas relacionadas entre elas

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora