具有阿拉伯列名称的更新语句中的语法错误
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
我有一个包含阿拉伯列名称的 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