Ir para o conteúdo
Pt Freelancer

Remover dados de SQL

Mensagens Recomendadas

Pt Freelancer    0
Pt Freelancer

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Pt Freelancer    0
Pt Freelancer

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Pt Freelancer    0
Pt Freelancer

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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Betovsky    2
Betovsky

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á.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Pt Freelancer    0
Pt Freelancer

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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
TheDark    0
TheDark

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jaferreira    0
jaferreira

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.......

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade