Access 2016データベースを簡単に更新しようとしています。私はVisual Studio/VB.netを使用しています。私は同じタイプのコーディングを使用して別のフォームでこれを行うことができました(それはかなり基本的ですが、それは学校プロジェクトのためでしたが、これ以上はありませんでした)。私はこれを行うには、2つの異なる方法を試してみました...例えば、更新テーブルアダプタを使用して: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
コードから抜けているかどうかわかりませんが、明らかに何かがありません。自分のデータベースフィールドをチェックして文字列/テキストフィールドに設定して、それを動作させることができるかどうかを確認しました。一度に、間違ったデータ型に設定された2つの電話番号フィールドが2つあったので、int32要件ごとに番号を入力するだけでした。私は実際にこれらのメソッドの1つを数ヶ月前にdbを更新/更新していましたが、その後何が起こったのか分かりません。私はVisual Studioが私におそらく貢献したいくつかの問題を教えてくれたことを知っていますが、何が起こったのか覚えておくには長すぎます。
私はむしろ何か別の方法で動作するように思えるようにしようとすると失われています。どんなアイデアを見て、そして/または試してみるか?うまくいけば私は正しい方向に向けることができます。
感謝:)あなたの更新ステートメントが正しくない
さて、 'UPDATE'文は何が実行されていますか?明らかに構文エラーがあります。このコードはSQLインジェクションにも広く使われているので、ユーザーがあなたに送る値は何であれ、コードとして*盲目的に*実行していることに注意してください。これらの値の1つ以上が無効な構文であるようです。 (これらの値のどれもが悪意のある*であってもうまくいきません。これに対処するために、パラメータ化されたクエリを見てみたいでしょう) – David