【问题标题】:Data updation and deletion error数据更新删除错误
【发布时间】:2014-04-04 17:03:14
【问题描述】:

我有一个DataGrid 和许多文本字段来将数据添加到数据库中。当我添加新数据时,它会在数据库和数据网格中更新。但是当我删除数据时,它只会从数据库中删除。它不会在数据网格中更新。

当我尝试更新数据时,它一次只更新一条记录。当我尝试另一条记录时,它给我一个错误"The variable name '@date' has already been declared. Variable names must be unique within a query batch or stored procedure." 我必须关闭并重新打开表单以更新新记录。

Imports System.Data.SqlClient


Public Class Form
Dim con As New SqlClient.SqlConnection("Server = DEL-PC; Database=Shj; Trusted_Connection=yes;")
Dim cmd As New SqlCommand
Dim dr As SqlDataReader
Dim ds As DataSet
Dim da As SqlDataAdapter


Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

SqlDataAdapter1.Fill(DataSet11)

End Sub


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


If RegNoTextBox.Text <> "" Then
cmd.Connection = con
con.Open()
cmd.CommandText = "insert into WaterProofing(Date,RegNo) values ('" & DateDateTimePicker.Value & "','" & RegNoTextBox.Text & "')"
cmd.ExecuteNonQuery()
Call showdata()
con.Close()

Else
MessageBox.Show("Please enter registration number")
End If
End Sub

//updation
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles editbtn.Click

cmd.Parameters.AddWithValue("@date", DateDateTimePicker.Value)
cmd.Parameters.AddWithValue("@regno", RegNoTextBox.Text)
cmd.Connection = con
con.Open()
cmd.CommandText = "update WaterProofing  set RegNo= @regno where date=@date"
cmd.ExecuteNonQuery()
Call showdata()
con.Close()
MessageBox.Show("Details Updated!")
End Sub


Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles deletebtn.Click
cmd.Connection = con
con.Open()
cmd.CommandText = "delete from WaterProofing where date='" & DateDateTimePicker.Value & "'"
cmd.ExecuteNonQuery()
Call showdata()
con.Close()
MessageBox.Show("Details Deleted!")
End Sub

Sub showdata()

SqlDataAdapter1.Fill(DataSet11, "WaterProofing")

With DataGridView
.Update()
End With

End Sub
End Class

请帮我删除和更新。

【问题讨论】:

    标签: vb.net sql-server-2008 datagrid


    【解决方案1】:

    Button2_Click 声明CommandText 之前添加参数

    这样试试:

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles editbtn.Click
    
    Try
    
        Dim command As New SqlCommand
    
        con.Open()
        command.Connection = con
    
        command.CommandText = "update WaterProofing  set RegNo= @regno where date=@date"
        command.Parameters.AddWithValue("@date", DateDateTimePicker.Value)
        command.Parameters.AddWithValue("@regno", RegNoTextBox.Text)
    
        command.ExecuteNonQuery()
        con.Close()
        Call showdata()
    
        MessageBox.Show("Details Updated!")
    
    Catch ex as Exception
       MessageBox.Show(ex.Message)  
    End try
    
    End Sub
    

    更新

    基本上,当您第一次加载DataGridView 时,您必须执行相同的操作,以便在删除或更新记录后使用数据库中的当前数据刷新DataGridView,因此您的ShowData Sub 可能看起来像这样的

    Private Sub ShowData()
    
    Dim Connection As SqlConnection
    Connection = New SqlConnection("YourConnectionString")
    
    Try
    
        Connection.Open()
        Dim SQL As String = "SELECT Field1, Field2, Field3 FROM Table"
    
        Dim DS As New DataSet
        Dim Adapter As New SqlDataAdapter(SQL, Connection)
    
        Adapter.Fill(DS)
    
        DataGridView.DataSource = DS.Tables(0)
        DataGridView.Refresh()
    
    Catch ex As Exception
    
        MessageBox(ex.Message)
    
    Finally
    
        Connection.Close()
    
    End Try
    
    End Sub
    

    【讨论】:

    • 非常感谢!!!正如你所说,更新对我有用!!!!但我的删除选项仍然存在问题。它会从数据库中删除,但更改不会出现在数据网格上。我必须关闭并打开我的表格才能看到它。正如您在更新中提到的那样,我通过添加 try catch 块对代码进行了更改。
    • 是的,因为在showdata(),您正在使用包含与以前相同记录的旧数据集重新填充DataGridView。您将需要从 db 更新 DataSet,然后使用更新后的 DataSet 填充 DataGridview
    • Sub showdata_delete() SqlDataAdapter1.Update(DataSet11, "WaterProofing") SqlDataAdapter1.Fill(DataSet11, "WaterProofing") With DataGridView1 .DataSource = DataSet11.DefaultViewManager End With ----- 这是一个我给删除的新节目数据。但这会删除并清空整个数据网格。非常感谢您的耐心和帮助我。我对 vb 真的很陌生,并且正在努力。
    • 我尝试按照您显示的方式编辑我的代码。但问题仍然存在。请查看我粘贴的下面的代码。
    • 那你就可以做一个技巧了。用这两行 DataGridView.Rows.RemoveAt(DataGridView.CurrentRow.Index) DataGridView.Refresh() 替换您的 ShowData() 调用。这样,您将删除该行,而不是再次从数据库中加载 DatagridView
    【解决方案2】:

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 处理 deletebtn.Click 试试

            Dim command As New SqlCommand
    
            con.Open()
            command.Connection = con
            command.CommandText = "delete from WaterProofing where date='" & DateDateTimePicker.Value & "'"
            command.ExecuteNonQuery()
            con.Close()
            Call ShowData_Delete()
    
            MessageBox.Show("Details Deleted!")
    
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        Finally
    
        End Try
    End Sub
    

    私有子 ShowData_Delete() 暗淡连接为 SqlConnection

        Try
    
    
            Connection = New SqlConnection("Server = DEL-PC; Database=Shj; Trusted_Connection=yes;")
            Connection.Open()
            Dim SQL As String = "SELECT * from WaterProofing"
    
            Dim DS As New DataSet
            Dim Adapter As New SqlDataAdapter(SQL, Connection)
    
            Adapter.Fill(DS)
    
            DataGridView1.DataSource = DS.Tables(0)
            DataGridView1.Refresh()
    
    
        Catch ex As Exception
    
            MessageBox.Show(ex.Message)
    
        Finally
            Connection.Close()
    
    
        End Try
    
    End Sub
    

    【讨论】:

    • 我收到警告警告 1 变量“连接”在被赋值之前已被使用。运行时可能会导致空引用异常。这是用于 sub showdelete 中的连接。
    • 我想知道您为删除警告而编辑的位置。
    • 只是将Connection = New SqlConnection("YourConnectionString") 移动到Try 块上方
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多