我正在嘗試對Access 2016數據庫進行簡單更新。我正在使用Visual Studio/VB.net。我已經能夠以不同的形式做到這一點,沒有問題使用相同類型的編碼(這是非常基本的,這是一個學校項目,但不再是)。我曾嘗試使用更新表適配器兩種不同的方式做到這一點...,例如:使用Visual Studio 2015更新Access數據庫 - VB.net
MediatorsListTableAdapter.UpdateMediators(MediatorIDTextBox.Text, MediatorNameTextBox.Text, MaskedTextBox1.Text, MaskedTextBox2.Text, DateTimePicker1.Value,
AvailabilityTextBox.Text, EmailTextBox.Text)
使用方法,我總是得到notImplemented拋出異常,即使我已經使用了類似類型的適配器別處。我也嘗試過使用過緊的方法(我知道,不理想):
saveInfo = "UPDATE mediatorsList(mediatorName, email, mediatorPrimaryPhone, mediatorSecondaryPhone, lastMediationDate, availability)
VALUES('" & MediatorNameTextBox.Text & "','" & EmailTextBox.Text & "','" & MaskedTextBox1.Text & "','" & MaskedTextBox2.Text & "',
'" & DateTimePicker1.Value & "','" & AvailabilityTextBox.Text & "', WHERE mediatorID = '" & MediatorIDTextBox.Text & "') "
但這種方法讓我語法錯誤的UPDATE語句錯誤。我再次在別處使用這種方法,沒有任何問題。下面我將發佈此表單的所有代碼。
Imports System.Data
Imports System.Data.Odbc ' Import ODBC class
Imports System.Data.OleDb
Imports System.Data.SqlClient
Public Class editMediators
Dim NewData As Boolean
Dim objConnection As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\ECRDatabase.accdb")
' create functions for save or update
Private Sub runAccessSQL(ByVal sql As String)
Dim cmd As New OleDbCommand
connect() ' open our connection
Try
cmd.Connection = conn
cmd.CommandType = CommandType.Text
cmd.CommandText = sql
cmd.ExecuteNonQuery()
cmd.Dispose()
conn.Close()
MsgBox("Data Has Been Saved !", vbInformation)
Catch ex As Exception
MsgBox("Error when saving data: " & ex.Message)
End Try
End Sub
Private Sub editMediators_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.MediatorsListTableAdapter.Fill(Me.ECRDatabaseDataSet.mediatorsList) 'loads current mediator information
DateTimePicker1.Value = Today()
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 'update button
NewData = True
alertMsgBox2()
End Sub
Private Sub alertMsgBox2()
Select Case MsgBox("Yes: Saves Changes," & vbNewLine &
"No: Exits the mediator update window without saving," & vbNewLine &
"Cancel: Returns to the mediator update window.", MsgBoxStyle.YesNoCancel, "Update Mediator Information")
Case MsgBoxResult.Yes
MediatorsListBindingSource.EndEdit()
updateMediator()
'intentionally commented out
'MediatorsListTableAdapter.UpdateMediators(MediatorIDTextBox.Text, MediatorNameTextBox.Text, MaskedTextBox1.Text, MaskedTextBox2.Text, DateTimePicker1.Value,
'AvailabilityTextBox.Text, EmailTextBox.Text)
' Me.Close()
Case MsgBoxResult.No
MediatorsListBindingSource.CancelEdit()
Me.Close()
End Select
End Sub
Private Sub updateMediator()
Dim saveInfo As String
If NewData Then
Dim Message = MsgBox("Are you sure you want to update mediator information? ", vbYesNo + vbInformation, "Information")
If Message = vbNo Then
Exit Sub
End If
Try
'Update mediator information
saveInfo = "UPDATE mediatorsList(mediatorName, email, mediatorPrimaryPhone, mediatorSecondaryPhone, lastMediationDate, availability)
VALUES('" & MediatorNameTextBox.Text & "','" & EmailTextBox.Text & "','" & MaskedTextBox1.Text & "','" & MaskedTextBox2.Text & "',
'" & DateTimePicker1.Value & "','" & AvailabilityTextBox.Text & "', WHERE mediatorID = '" & MediatorIDTextBox.Text & "') "
Catch ex As Exception
End Try
Else
Exit Sub
End If
runAccessSQL(saveInfo)
End Sub
很明顯我缺少一些東西,雖然我不確定它是否缺少代碼。我檢查了我的數據庫字段,並將它們設置爲字符串/文本字段,以查看是否可以使其工作。有一次,我有兩個電話號碼字段被設置爲錯誤的數據類型,所以您只能按照int32的要求輸入一個數字。實際上我有幾個月前使用這些方法之一來處理/更新數據庫,但是我無法弄清楚以後發生了什麼。我知道Visual Studio給了我一些可能貢獻的問題,但是記住發生的事情太長了。
我很遺憾還有其他的嘗試,因爲這似乎應該以某種方式工作。任何想法看什麼和/或嘗試?希望我能指出正確的方向。
謝謝:)
那麼,正在執行的'UPDATE'語句是什麼?顯然它有一個語法錯誤。請注意,這段代碼對SQL注入是開放的,所以你基本上盲目地執行*作爲代碼*你的用戶發送給你的任何值。看起來像一個或多個這些值是無效的語法。 (希望這些值都不會是惡意的,甚至是偶然的。你可能想看看參數化查詢來解決這個問題。) – David