2017-03-31 131 views
0

我正在嘗試對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給了我一些可能貢獻的問題,但是記住發生的事情太長了。

我很遺憾還有其他的嘗試,因爲這似乎應該以某種方式工作。任何想法看什麼和/或嘗試?希望我能指出正確的方向。

謝謝:)

+1

那麼,正在執行的'UPDATE'語句是什麼?顯然它有一個語法錯誤。請注意,這段代碼對SQL注入是開放的,所以你基本上盲目地執行*作爲代碼*你的用戶發送給你的任何值。看起來像一個或多個這些值是無效的語法。 (希望這些值都不會是惡意的,甚至是偶然的。你可能想看看參數化查詢來解決這個問題。) – David

回答

0

你的更新語句是不正確的WHERE子句是VALUES()內的部分,應該是後。

試試這個: (編輯)

saveInfo = "UPDATE mediatorsList SET mediatorName='" & _ 
    MediatorNameTextBox.Text & "', email='" & EmailTextBox.Text & "', .... WHERE " & _ 
    mediatorID = '" & MediatorIDTextBox.Text & "'" 

此外,一定要正確處理日期。我通常強制格式化爲yyyy/mmm/dd格式。

+1

不應該是UPDATE mediatorsList SET mediatorName = ... WHERE ... '(加上應參數化,如上面註釋中所述)? – Mark

+0

PLus在WHERE之前的外部逗號 – peterG

+0

PLUS將日期轉換爲文本 – Plutonix