具有阿拉伯列名称的更新语句中的语法错误

Syntax error in update statement with Arabic column names

我有一个包含阿拉伯列名称的 Access 2007 数据库。

我想做的是使用整数作为主键对图像进行更新,但我收到一条错误消息,指出 UPDATE 语句语法中存在错误。

这是相关代码

Private Sub InsertImage(ByRef barcode As Image, ByRef photo As Image, ByVal recID As String)
    Dim conn As OleDbConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\المشروع\April2015.accdb")
    Dim photodata As MemoryStream = New MemoryStream
    Dim barcodedata As MemoryStream = New MemoryStream
    photo.Save(photodata, ImageFormat.Png)
    barcode.Save(barcodedata, ImageFormat.Png)
    Dim photobytes() As Byte = photodata.GetBuffer()
    Dim barcodebytes() As Byte = barcodedata.GetBuffer()
    Dim query As String = _
    "UPDATE [Records] SET [الصورة] = @photo, SET [باركود] = @barcode WHERE [رقم السجل] = @recID"
    Dim cmd As OleDbCommand = New OleDbCommand(query, conn)
    Dim pParam As OleDbParameter = New OleDbParameter("@photo", OleDbType.Binary)
    pParam.Value = photobytes
    pParam.Size = photobytes.Length
    Dim bParam As OleDbParameter = New OleDbParameter("@barcode", OleDbType.Binary)
    bParam.Value = barcodebytes
    bParam.Size = barcodebytes.Length
    Dim rParam As OleDbParameter = New OleDbParameter("@recID", OleDbType.Integer)
    rParam.Value = Int32.Parse(recID)
    cmd.Parameters.Add(pParam)
    cmd.Parameters.Add(bParam)
    cmd.Parameters.Add(rParam)
    conn.Open()
    cmd.ExecuteNonQuery()
    conn.Close()
End Sub

错误详情为:

System.Data.OleDb.OleDbException was unhandled


ErrorCode=-2147217900
  Message="Syntax error in UPDATE statement."
  Source="Microsoft Office Access Database Engine"
  StackTrace:
       at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
       at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
       at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
       at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
       at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
       at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
       at WindowsApplication1.Entry.InsertImage(Image& barcode, Image& photo, String recID) in E:\المشروع\Records\Records\Entry.vb:line 92
       at WindowsApplication1.Entry.doUpsert() in E:\المشروع\Records\Records\Entry.vb:line 32
       at WindowsApplication1.Entry.SaveButton_Click(Object sender, EventArgs e) in E:\المشروع\Records\Records\Entry.vb:line 41
       at System.Windows.Forms.Control.OnClick(EventArgs e)
       at System.Windows.Forms.Button.OnClick(EventArgs e)
       at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       at System.Windows.Forms.Control.WndProc(Message& m)
       at System.Windows.Forms.ButtonBase.WndProc(Message& m)
       at System.Windows.Forms.Button.WndProc(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.Run(ApplicationContext context)
       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
       at WindowsApplication1.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 81
       at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

您有多个 set 子句,而无论您要更新多少列,您只需要一个:

UPDATE [Records] 
SET    [الصورة] = @photo, [باركود] = @barcode 
WHERE  [رقم السجل] = @recID