尝试更新access数据库-VB.Net时UPDATE语句失败
我正在尝试为自己创建一个简单的票务软件,它有一个VB.Net前端和一个尝试更新access数据库-VB.Net时UPDATE语句失败,vb.net,ms-access,Vb.net,Ms Access,我正在尝试为自己创建一个简单的票务软件,它有一个VB.Net前端和一个Access2003后端。我不同意允许添加新行,但当我尝试对更新行按钮进行编码时,它给了我一个错误,即Microsoft JET Database Engine-Update语句中的语法错误。我找不到问题所在 Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Clic
Access2003
后端。我不同意允许添加新行,但当我尝试对更新行按钮进行编码时,它给了我一个错误,即Microsoft JET Database Engine-Update语句中的语法错误。
我找不到问题所在
Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click
Dim da As New OleDbDataAdapter
Dim dt As New DataTable
Dim ConnectString As String = ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\aaron-pister\Desktop\New Role Notes\Issue Tracker Express\Issue Tracker Express\Issue Tracker.mdb")
Dim con As New OleDbConnection(ConnectString)
con.Open()
Dim Green42 As String = "UPDATE Issues Basic Details SET [Company Name] = '" & txtClientName.Text & "', [Status] = '" & cbStatus.Text & "', [Company Contact] = '" & txtClientContact.Text & "', [Description] = '" & txtDesc.Text & "', [Notes] = '" & txtRes.Text & "' WHERE [TicketNum] = '" & txtTicket.Text & "'"
'con.Open()
If txtClientName.Text <> "" Then
Try
'MyCom.CommandText = "UPDATE [Issues Basic Details] SET Company Name = '" & txtClientName.Text & "', Status = '" & cbStatus.Text & "', Company Contact = '" & txtClientContact.Text & "', Description = '" & txtDesc.Text & "', Notes = '" & txtRes.Text & "' WHERE TicketNum = '" & txtTicket.Text & "')"
da = New OleDbDataAdapter(Green42.ToString, ConnectString)
da.Fill(dt)
da.Update(EsInfo1, "Issues Basic Details")
MsgBox("Your record has been updated successfully.", MsgBoxStyle.DefaultButton1, "New Ticket Submitted")
Catch ex As Exception
MsgBox(ex.Source & "-" & ex.Message)
con.Close()
Exit Sub
End Try
Else
MsgBox("You must have an entry in the Client Name, Client Contact and Status fields. It is recommended to also have a value in the Description field.", MsgBoxStyle.OkOnly, "Issue Tracker Express")
btnNewIncident_Click(sender, e)
Exit Sub
End If
End Sub
Private Sub btnUpdate_Click(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理btnUpdate。单击
Dim da作为新的OLEDB数据适配器
Dim dt作为新数据表
Dim ConnectString作为字符串=(“提供程序=Microsoft.Jet.OLEDB.4.0;数据源=C:\Documents and Settings\aaron pister\Desktop\New Role Notes\Issue Tracker Express\Issue Tracker Express\Issue Tracker.mdb”)
Dim con作为新的OLEDB连接(连接字符串)
con.Open()
Dim Green42为String=“UPDATE Issues Basic Details SET[Company Name]=”&txtClientName.Text&“,[Status]=”&cbStatus.Text&“,[Company Contact]=”&txtClientContact.Text&“,[Description]=”&txtDesc.Text&“,[Notes]=”&txtRes.Text&“WHERE[TicketNum]=”&txtTicket.Text&“”
'con.Open()
如果txtClientName.Text为“”,则
尝试
'MyCom.CommandText=“更新[Issues Basic Details]设置公司名称='”&txtClientName.Text&',状态='&cbStatus.Text&',公司联系人='”&txtClientContact.Text&',Description='”&txtDesc.Text&',Notes='”&txtRes.Text&“&WHERE TicketNum=”&txtcticket.Text&'))
da=新的OleDbDataAdapter(Green42.ToString,ConnectString)
da.填充(dt)
da.更新(EsInfo1,“发布基本细节”)
MsgBox(“您的记录已成功更新。”,MsgBoxStyle.DefaultButton1,“已提交新票证”)
特例
MsgBox(例如来源和消息)
con.Close()
出口接头
结束尝试
其他的
MsgBox(“您必须在“客户名称”、“客户联系人”和“状态”字段中有一个条目。建议在“描述”字段中也有一个值。”,MsgBoxStyle.OkOnly,“Issue Tracker Express”)
Btnewincident_点击(发送者,e)
出口接头
如果结束
端接头
您的表名也必须用括号括起来:
Dim Green42 As String = "UPDATE [Issues Basic Details] SET [Company Name]..."
另外,不要将值放入字符串中。它避免了SQL注入。您的表名也必须用括号括起来:
Dim Green42 As String = "UPDATE [Issues Basic Details] SET [Company Name]..."
另外,不要将值放入字符串中。它避免了SQL注入。这:
UPDATE Issues Basic Details SET ...
不是有效的SQL。您需要通过限定表名来帮助它:
UPDATE [Issues Basic Details] SET ...
其他一些建议:
使用准备好的语句(参数化SQL以避免SQL注入攻击)
不要在点击事件处理程序中定义这种类型的行为——使用一个助手类来完成这项工作,这样它就可以被重用,而不会直接耦合到UI
使用和语句。您的OleDbConnection
类实现了IDisposable
。您没有正确处理此连接
这:
不是有效的SQL。您需要通过限定表名来帮助它:
UPDATE [Issues Basic Details] SET ...
其他一些建议:
使用准备好的语句(参数化SQL以避免SQL注入攻击)
不要在点击事件处理程序中定义这种类型的行为——使用一个助手类来完成这项工作,这样它就可以被重用,而不会直接耦合到UI
使用和语句。您的OleDbConnection
类实现了IDisposable
。您没有正确处理此连接
虽然目前很难阅读代码,但看起来您确实在尝试执行“临时”查询,这可能会导致很多问题
我建议首先将您的语句更改为a,以帮助诊断问题。虽然目前很难读取代码,但看起来您确实在尝试执行“临时”查询,这可能会导致很多问题
我建议首先将您的语句更改为a,以帮助诊断问题。仅添加到此答案,作为一般经验规则空格,命名表和列时应避免使用特殊字符和保留关键字。仅添加到此答案,作为一般经验规则空格,命名表和列时要避免使用特殊字符和保留关键字。我不确定我是否理解您所说的参数化SQL是什么意思。我想我理解你的另外两点,也理解它们。您能提供一些示例,说明我如何在提供的代码中参数化SQL吗?@AaronPister:请参见此处的示例:。它显示了Using
语句的用法和SQL语句的参数化。我不确定我是否理解您所说的参数化SQL是什么意思。我想我理解你的另外两点,也理解它们。您能提供一些示例,说明我如何在提供的代码中参数化SQL吗?@AaronPister:请参见此处的示例:。它显示了Using
语句的用法和SQL语句的参数化。