theskiguy Ответов: 1

Как обновить базу данных из связанного datagridview


Я пытаюсь обновить базу данных из привязанного datagridview, но мне не очень везет. Я хочу сначала отобразить данные в datagridview, а затем, после внесения изменений в datagridview, я хочу нажать кнопку обновления, чтобы обновить базу данных. Я создал код, который связывает базу данных с datagridview, и он отлично работает. У меня проблемы с тем, как потом обновить базу данных. Я создал конструктор команд для автоматического создания команды обновления. Если я обновляю datatable программно, а затем вызываю обновление dataadapter, он работает нормально. Однако, если я попытаюсь вызвать обновление dataadapter в моей кнопке, это даст мне ошибку:
The ConnectionString property has not been initialized.

Я думаю, что я близок к этому, но я просто не могу понять, почему это не работает. Нужно ли мне заново инициализировать что-то в моей кнопке?

Что я уже пробовал:

Dim con As System.Data.OleDb.OleDbConnection = New OleDb.OleDbConnection(connectionString)
    Dim da As OleDbDataAdapter
    Dim ds As DataSet
    Dim dt As DataTable


    Private Sub FormPlannedProductionTimes_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown

        Me.DateTimePickerStart.Value = Today

    End Sub


    Private Sub RefreshDGVMonday()

        con = New OleDb.OleDbConnection(connectionString)
        da = New OleDbDataAdapter
        ds = New DataSet
        dt = New DataTable

        Dim DGV As DataGridView = Me.DGVMonday


        Try

            'Create the select command
            da.SelectCommand = New OleDbCommand(Nothing, con)

           
            da.SelectCommand.CommandText = "SELECT MACHINE AS MACH, OEEDATE, SHIFT1 AS S1, SHIFT2 AS S2, SHIFT3 AS S3 " & _
                                            "FROM PLANNEDPRODUCTIONTIMES " & _
                                            "WHERE OEEDATE = TO_DATE('" & DateTimePickerStart.Value & "', 'MM/DD/YYYY HH:MI:SS AM') " & _
                                            "ORDER BY MACH"

            'Create a command builder to auto generate the update command
            Dim cb As New OleDbCommandBuilder(da)
            da.InsertCommand = cb.GetInsertCommand

            'Clear all columns
            DGV.Columns.Clear()

            'Fill the DataAdapter
            da.Fill(ds, "Monday")
            dt = ds.Tables("Monday")

            'Programatically change the values in the datatable
            'then update the data adapter
            'This works fine, however, if I remove these 2 lines
            'and call theupdate in my button below, I get an error
            dt.Rows(0)!s1 = 1
            da.Update(dt)

            'Set the datasource
            DGV.DataSource = dt

            'Set the width
            DGV.Columns("MACH").Width = 50
            DGV.Columns("OEEDATE").Width = 70
            DGV.Columns("S1").Width = 30
            DGV.Columns("S2").Width = 30
            DGV.Columns("S3").Width = 30

         

        Catch ex As Exception
            MsgBox("Could not refresh the production time data because: " & vbNewLine & vbNewLine & _
                  ex.Message & vbNewLine & _
                  "Contact Admin for more assistance.", MsgBoxStyle.Exclamation, "Error")

        Finally
            con.Close()
            con.Dispose()
            da.Dispose()

        End Try


    End Sub

    Private Sub DateTimePickerStart_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DateTimePickerStart.ValueChanged
        RefreshDGVMonday()
    End Sub



    Private Sub BtnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnUpdate.Click

        'This gives me an error
        da.Update(dt)

    End Sub

1 Ответов

Рейтинг:
0

theskiguy

Я и сам догадался. Я по ошибке избавился от подключения к базе данных в своем предложении finally после получения данных, поэтому я удалил этот код. Я думаю, что именно по этой причине я получал ошибку строки подключения.

Затем я немного изменил свой код кнопки обновления теперь, если он работает нормально.

Private Sub BtnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnUpdate.Click


      If con.State = ConnectionState.Closed Then con.Open()
       Dim RowsUpdated As Integer = 0

       Try

           RowsUpdated = da.Update(dt) 'Update the database

       Catch ex As Exception

           MsgBox(ex.Message)

       Finally
           con.Close()
       End Try

       MsgBox("RowsUpdated = " & RowsUpdated)


   End Sub