DataTable не обновляет базу данных с помощью DataAdapter (VB.NET) - PullRequest
0 голосов
/ 11 июля 2019

* ПРИМЕЧАНИЕ. Вместо этого я удалил свой предыдущий вопрос «Обновить базу данных из DataTable и DataAdapter».Я обновил формулировку и код в соответствии с тем, что я сейчас тестирую.

Я пытаюсь обновить базу данных информацией из WinForm.У меня не было проблем при использовании «обычной» команды SQL-обновления, написанной от руки (параметры, установленные в значениях текстового поля), но я пытаюсь очистить и уменьшить свой код, и я решил связать элементы управления с DataTable и использоватькоманда обновления DataAdapter для достижения того же самого.

Я пытался заставить работать различные комбинации параметров и команд обновления, но База данных не обновляется из новых значений DataTable.Я прошел через код с каждым изменением и вижу, что DataTable получает новые значения текстового поля, но эти обновления не идут в базу данных.(Это видно, когда блок Fill_Date запускается и выбирает все новые данные из базы данных.)

То, что я пробовал: позволить привязке получить новые значения вместо установки параметров вручную.Использование компоновщика команд для построения команды обновления с помощью команды .UpdateCommand.ExecuteNonQuery(), command and of course a straight .Update (DataTable).

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

Public Class frmDATA
    Dim dt_Test As New DataTable
    Dim da_Test As New SqlDataAdapter
    Dim SQLcmd As SqlCommand

    Private Sub frmDemog_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        BuildSQL()
        Fill_Data()
        BindControls()
    End Sub

    Private Sub frmDemog_Closed(sender As Object, e As EventArgs) Handles Me.Closed
        If Not IsNothing(dt_Test) Then dt_Test.Dispose()
        If Not IsNothing(da_Test) Then da_Test.Dispose()
        If Not IsNothing(SQLcmd) Then SQLcmd.Dispose()
        Me.Dispose()
    End Sub

    Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click
        Update_Me()
    End Sub

    Private Sub BindControls()
        txtLName.DataBindings.Add("Text", dt_Test, "Last_Name")
        txtFName.DataBindings.Add("Text", dt_Test, "First_Name")
        txtAKA.DataBindings.Add("Text", dt_Test, "AKA")
    End Sub

    Public Sub Update_Me(RefreshSearch As Boolean, RefreshView As Boolean)
        Try
            Dim testID As Integer = frmTest.dgvSearch.CurrentRow.Cells(0).Value
            da_Test.UpdateCommand.Parameters("@ID").Value = testID
            da_Test.Update(dt_Test)

            Fill_Data()

        Catch SqlExceptionErr As SqlException
            MsgBox(SqlExceptionErr.Message, vbCritical, "Error")
        Catch ex As Exception
            MsgBox(ex.Message, vbCritical, "Error")
        End Try
    End Sub

    Public Sub Fill_Data()
        Try
            dt_Test.Clear()
            da_Test.SelectCommand.Parameters("@ID").Value = testID
            da_Test.Fill(dt_Test)

        Catch SqlExceptionErr As SqlException
            MsgBox(SqlExceptionErr.Message, vbCritical, "Error")
        Catch ex As Exception
            MsgBox(ex.Message, vbCritical, "Error")
        End Try
    End Sub

    Private Sub BuildSQL()
        '** Build Selection Query
        SQLcmd = New SqlCommand(String.Join(Environment.NewLine,
            "SELECT ",
                "data_Test.[Last_Name], ",
                "data_Test.[First_Name], ",
                "data_Test1.[Last_Name] + ', ' + data_Test1.[First_Name] as [AKA] ",
            "FROM [DB].data_Test ",
                "LEFT JOIN [DB].data_Test as data_Test1 ",
                "ON data_Test.[ID] = data_Test1.[AKA_Demog_ID] ",
            "WHERE data_Test.[ID]=@ID"
            ), Vars.sqlConnDB)

        SQLcmd.Parameters.Add("@ID", SqlDbType.Int)
        da_Test.SelectCommand = SQLcmd

        '** Build Update Query
        SQLcmd = New SqlCommand(String.Join(Environment.NewLine,
            "UPDATE [DB].data_Test SET ",
                "[Last_Name]  = @LName,",
                "[First_Name]  = @FName",
            "WHERE [ID] = @ID"
            ), Vars.sqlConnDB)

        With SQLcmd.Parameters
            .Add("@LName", SqlDbType.NVarChar, 255, "Last_Name") 'Required
            .Add("@FName", SqlDbType.NVarChar, 255, "First_Name") 'Required
            .Add("@ID", SqlDbType.Int, 0, "ID")
        End With

        da_Test.UpdateCommand = SQLcmd
    End Sub
End Class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...