Как обновить в MS Access с помощью запроса в vb. net? - PullRequest
0 голосов
/ 07 августа 2020

Сначала мой код:

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

            Dim PatientNo As Integer = CInt(ID_TextBox.Text)
            Dim updatedDate As DateTime = DateTimePicker1.Value

            dbcon.Open()

            'If Selected "Cleared"

            If ComboBox1.SelectedIndex = 0 Then
                query = "UPDATE Swab SET isActive = FALSE, NextSwab = NULL WHERE PatientNo = " & PatientNo & ""
                Dim cmd As OleDbCommand = New OleDbCommand(query, dbcon)
                Dim dbada As New OleDbDataAdapter(cmd)
           
                'If Selected "Positive"

            ElseIf ComboBox1.SelectedIndex = 1 Then
                updatedDate = updatedDate.AddDays(7)
                query = "UPDATE Swab SET DateOfSpecimenCollection = " & DateTimePicker1.Value & ", NextSwab = " & updatedDate & " WHERE PatientNo = " & PatientNo & ""
                Dim cmd As OleDbCommand = New OleDbCommand(query, dbcon)
                Dim dbada As New OleDbDataAdapter(cmd)
             
            End If

            dbcon.Close()
    Catch ex As Exception

            MessageBox.Show(ex.ToString)

    End Try
End Sub

программа

Примечание : AutoID - это PatientNo

Я хочу создать программу, которая будет обновлять значение в базе данных ms-access, используя PatientNo ID, чтобы определить, какая запись должна быть обновлена. Если я выберу индекс 0, он обновит isActive до False и сделает дату NextSwab до NULL или пустой.

Однако, если я выберу 1, он обновит DateOfSpecimenCollection на основе дата и время, выбранные в программе vb и NextSwab на основе DateTime selected + 7 дней.

Проблема с моим кодом, по какой-то причине он ничего не возвращает. Он не получил ошибок, но он также не возвращает значения, которые мне нужны в моей базе данных. Раньше я пробовал использовать ExecuteNonQuery(), но он тоже не работает. Нужна помощь Я новичок и пытаюсь изучить vb. net с помощью MS Access, спасибо.

1 Ответ

2 голосов
/ 07 августа 2020

Ваш код не выполняет никаких SQL для базы данных. Код сам по себе не имеет никакого смысла, поскольку вы полностью неправильно используете адаптер данных.

Смысл адаптера данных заключается в агрегировании операций CRUD. Он имеет четыре свойства для командных объектов: SelectCommand, InsertCommand, UpdateCommand и DeleteCommand. Если вы понимаете basi c SQL, тогда назначение этих команд должно быть очевидным. Когда вы вызываете конструктор, которым вы являетесь, предоставленная вами команда назначается свойству SelectCommand. Должно быть очевидно, что заполнение SelectCommand оператором UPDATE нецелесообразно.

Идея состоит в том, что вы предоставляете оператор SELECT в SelectCommand и вызываете Fill для выполнения этого SQL и заполните DataTable набором результатов запроса. Затем вы вносите изменения в эти данные по мере необходимости, добавляя, изменяя и удаляя строки, где это необходимо. Затем вы вызываете Update на адаптере данных, и он выполняет InsertCommand для каждой добавленной строки, UpdateCommand для каждой измененной строки и DeleteCommand для каждой удаленной строки, чтобы зафиксировать изменения, сделанные локально, обратно в базу данных. .

Если вы хотите правильно использовать адаптер данных, DataTable и DataGridView, вам нужно сначала внести изменения в DataTable либо через пользовательский интерфейс, либо в коде, а затем использовать адаптер данных, чтобы правильно сохранить эти изменения обратно в базу данных.

Если вы хотите изменить данные непосредственно в базе данных, вам не следует использовать адаптер данных. Вы должны набрать ExecuteNonQuery в самой команде. Обратите внимание, что это ничего не изменит в вашей сетке, поэтому вам нужно будет повторно заполнить его из базы данных, если вы хотите, чтобы он оставался актуальным.

По сути, вам нужно потратить некоторое время на чтение об ADO . NET, чтобы научиться делать это правильно.

...