【问题标题】:Datagridview loading database multiple timesDatagridview多次加载数据库
【发布时间】:2014-04-04 00:43:02
【问题描述】:

表单上有一个datagridview和一个按钮。相同的按钮将数据加载到 datagridview 中(如果 Button1.Text = "CHANGE DATABASE" Then)并保存更改。一切正常,直到再次单击按钮以加载数据,然后在上次加载后再次加载数据库(如果数据库有 3 行,则再次显示这 3 行,并在每次单击按钮时再次在 datagridview 中显示 - 重复但不在 Access 文件中在数据网格视图中)。

我第二次单击更新更改数据库时收到此错误:并发冲突。

    Imports System.Data.OleDb
Public Class Form1

    Dim DataSet1 As New DataSet()

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

        Dim ConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\PD_D.mdb"
        Dim SQLString As String = "SELECT * FROM DIV"
        Dim OleDBConn1 As System.Data.OleDb.OleDbConnection = New System.Data.OleDb.OleDbConnection(ConnString)
        Dim OleDbDataAdapter1 As System.Data.OleDb.OleDbDataAdapter = New System.Data.OleDb.OleDbDataAdapter(SQLString, OleDBConn1)

        Using OleDBConn1
            If Button1.Text = "CHANGE DATABASE" Then
                OleDbDataAdapter1.Fill(DataSet1, "DIV")
                DataGridView1.DataSource = DataSet1.Tables("DIV")

                Button1.Text = "UPDATE CHANGES"
                Button1.ForeColor = Color.DarkRed


            Else

                If DataSet1.HasChanges Then

                    Using con = New OleDbConnection(ConnString)

                        Me.Validate()
                        Dim builder As OleDbCommandBuilder = New OleDbCommandBuilder(OleDbDataAdapter1)
                        OleDbDataAdapter1.SelectCommand = New OleDbCommand(SQLString, con)
                        OleDbDataAdapter1.DeleteCommand = builder.DataAdapter.DeleteCommand
                        OleDbDataAdapter1.InsertCommand = builder.DataAdapter.InsertCommand
                        OleDbDataAdapter1.UpdateCommand = builder.DataAdapter.UpdateCommand
                        OleDbDataAdapter1.Update(DataSet1.Tables("DIV").GetChanges())


                    End Using

                Else
                    'OleDBConn1.Close()
                    GoTo ext
                End If

ext:
                '
                Button1.Text = "CHANGE DATABASE"
                Button1.ForeColor = Color.Black


            End If


        End Using

    End Sub

【问题讨论】:

  • 这是一个 VB.NET 问题。我正在更改标签。
  • 现在不鼓励使用 GoTo 语句。我还建议更改更新数据库的方式。根据文本显示的内容进行更新并不是最佳做法。
  • @Alex 然而,问题在于我是否在代码的第一部分使用相同的按钮或表单加载以及数据库更新的按钮。你能帮我解决我遇到的错误和数据乘法吗?

标签: vb.net datagridview


【解决方案1】:

由于每次单击按钮时都会填充 DataSet 的 DataTable (DIV),因此您会收到重复的条目。

单击按钮中的以下行将解决它:

DataSet1 = New DataSet()

之后您的代码将如下所示:

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

    Dim ConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\PD_D.mdb"
    Dim SQLString As String = "SELECT * FROM DIV"
    Dim OleDBConn1 As System.Data.OleDb.OleDbConnection = New System.Data.OleDb.OleDbConnection(ConnString)
    Dim OleDbDataAdapter1 As System.Data.OleDb.OleDbDataAdapter = New System.Data.OleDb.OleDbDataAdapter(SQLString, OleDBConn1)

    Using OleDBConn1
        If Button1.Text = "CHANGE DATABASE" Then
            DataSet1 = New DataSet() 'Creates new instance of DataSet1
            OleDbDataAdapter1.Fill(DataSet1, "DIV")
            DataGridView1.DataSource = DataSet1.Tables("DIV")

            Button1.Text = "UPDATE CHANGES"
            Button1.ForeColor = Color.DarkRed
        Else
            If DataSet1.HasChanges Then
                Using con = New OleDbConnection(ConnString)

                    Me.Validate()
                    Dim builder As OleDbCommandBuilder = New OleDbCommandBuilder(OleDbDataAdapter1)
                    OleDbDataAdapter1.SelectCommand = New OleDbCommand(SQLString, con)
                    OleDbDataAdapter1.DeleteCommand = builder.DataAdapter.DeleteCommand
                    OleDbDataAdapter1.InsertCommand = builder.DataAdapter.InsertCommand
                    OleDbDataAdapter1.UpdateCommand = builder.DataAdapter.UpdateCommand
                    OleDbDataAdapter1.Update(DataSet1.Tables("DIV").GetChanges())
                End Using
            Else
                'OleDBConn1.Close()
                GoTo ext
            End If
ext:
                '
                Button1.Text = "CHANGE DATABASE"
                Button1.ForeColor = Color.Black
        End If
    End Using
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    相关资源
    最近更新 更多