Vb.net 将值插入到.mdb文件时,Visual Studio 2010多次插入语法错误
insert语句缺少什么?完整的代码现在在这里。我无法将新字段值添加到.mdb文件。开发此应用程序花了3天时间,现在无法运行Vb.net 将值插入到.mdb文件时,Visual Studio 2010多次插入语法错误,vb.net,Vb.net,insert语句缺少什么?完整的代码现在在这里。我无法将新字段值添加到.mdb文件。开发此应用程序花了3天时间,现在无法运行 Public Class client Dim cnn As New OleDb.OleDbConnection Private Sub reloaddata() If Not cnn.State = ConnectionState.Open Then cnn.Open() End If Dim da As New OleDb.Ol
Public Class client
Dim cnn As New OleDb.OleDbConnection
Private Sub reloaddata()
If Not cnn.State = ConnectionState.Open Then
cnn.Open()
End If
Dim da As New OleDb.OleDbDataAdapter("select * from clientsData", cnn)
Dim dt As New DataTable
da.Fill(dt)
Me.cview.DataSource = dt
cnn.Close()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
display.Hide()
cnn = New OleDb.OleDbConnection
cnn.ConnectionString = "provider= microsoft.jet.oledb.4.0; data source=" & Application.StartupPath & "\clients.mdb"
Me.reloaddata()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
display.Show()
End Sub
Private Sub cview_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles cview.CellClick
If cnn.State = ConnectionState.Closed Then
cnn.Open()
End If
Dim i As Integer
i = cview.CurrentRow.Index
If cview.CurrentCell.Value Is Nothing Then
MsgBox("Empty Field")
Else
view.lbl1.Text = cview.Item(0, i).Value.ToString
view.lbl2.Text = cview.Item(1, i).Value.ToString
view.lbl3.Text = cview.Item(2, i).Value.ToString
view.lbl4.Text = cview.Item(3, i).Value.ToString
view.lbl5.Text = cview.Item(4, i).Value.ToString
view.lbl6.Text = cview.Item(5, i).Value.ToString
view.lbl7.Text = cview.Item(6, i).Value.ToString
view.lbl8.Text = cview.Item(11, i).Value.ToString
view.lbl9.Text = cview.Item(12, i).Value.ToString
view.lbl10.Text = cview.Item(7, i).Value.ToString
view.lbl11.Text = cview.Item(8, i).Value.ToString
view.lbl12.Text = cview.Item(9, i).Value.ToString
view.lbl13.Text = cview.Item(10, i).Value.ToString
view.lbl14.Text = cview.Item(13, i).Value.ToString
view.Show()
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim cmd As New OleDb.OleDbCommand
If Not cnn.State = ConnectionState.Open Then
cnn.Open()
End If
cmd.Connection = cnn
cmd.CommandText = "insert into clientsdata(ID,Client,Project,Domain,Hosting,bulk sms,maintenance,Order date,amount,last billing,next billing,username,password,due amount) VALUES ('" & Me.cid.Text & "','" & Me.cname.Text & "','" & Me.cproj.Text & "','" & Me.cdmn.Text & "','" & Me.chost.Text & "','" & Me.csms.Text & "','" & Me.cmain.Text & "','" & Me.codt.Text & "','" & Me.camnt.Text & "','" & Me.cldt.Text & "','" & Me.cndt.Text & "','" & Me.cuid.Text & "','" & Me.cpass.Text & "','" & Me.cdue.Text & "' )"
cmd.ExecuteNonQuery()
Me.reloaddata()
cnn.Close()
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
cid.Text = "cid"
cname.Text = "cname"
cproj.Text = "cpro"
cdmn.Text = "domain"
chost.Text = "chost"
csms.Text = "sms"
cmain.Text = "main"
codt.Text = "codt"
camnt.Text = "mount"
cldt.Text = "last"
cndt.Text = "next"
cdue.Text = "due"
cuid.Text = "uid"
cpass.Text = "pass"
End Sub
insert语句缺少什么?完整的代码现在在这里。我无法将新字段值添加到.mdb文件。开发此应用程序花了3天时间,现在无法运行
Public Class client
Dim cnn As New OleDb.OleDbConnection
Private Sub reloaddata()
If Not cnn.State = ConnectionState.Open Then
cnn.Open()
End If
Dim da As New OleDb.OleDbDataAdapter("select * from clientsData", cnn)
Dim dt As New DataTable
da.Fill(dt)
Me.cview.DataSource = dt
cnn.Close()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
display.Hide()
cnn = New OleDb.OleDbConnection
cnn.ConnectionString = "provider= microsoft.jet.oledb.4.0; data source=" & Application.StartupPath & "\clients.mdb"
Me.reloaddata()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
display.Show()
End Sub
Private Sub cview_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles cview.CellClick
If cnn.State = ConnectionState.Closed Then
cnn.Open()
End If
Dim i As Integer
i = cview.CurrentRow.Index
If cview.CurrentCell.Value Is Nothing Then
MsgBox("Empty Field")
Else
view.lbl1.Text = cview.Item(0, i).Value.ToString
view.lbl2.Text = cview.Item(1, i).Value.ToString
view.lbl3.Text = cview.Item(2, i).Value.ToString
view.lbl4.Text = cview.Item(3, i).Value.ToString
view.lbl5.Text = cview.Item(4, i).Value.ToString
view.lbl6.Text = cview.Item(5, i).Value.ToString
view.lbl7.Text = cview.Item(6, i).Value.ToString
view.lbl8.Text = cview.Item(11, i).Value.ToString
view.lbl9.Text = cview.Item(12, i).Value.ToString
view.lbl10.Text = cview.Item(7, i).Value.ToString
view.lbl11.Text = cview.Item(8, i).Value.ToString
view.lbl12.Text = cview.Item(9, i).Value.ToString
view.lbl13.Text = cview.Item(10, i).Value.ToString
view.lbl14.Text = cview.Item(13, i).Value.ToString
view.Show()
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim cmd As New OleDb.OleDbCommand
If Not cnn.State = ConnectionState.Open Then
cnn.Open()
End If
cmd.Connection = cnn
cmd.CommandText = "insert into clientsdata(ID,Client,Project,Domain,Hosting,bulk sms,maintenance,Order date,amount,last billing,next billing,username,password,due amount) VALUES ('" & Me.cid.Text & "','" & Me.cname.Text & "','" & Me.cproj.Text & "','" & Me.cdmn.Text & "','" & Me.chost.Text & "','" & Me.csms.Text & "','" & Me.cmain.Text & "','" & Me.codt.Text & "','" & Me.camnt.Text & "','" & Me.cldt.Text & "','" & Me.cndt.Text & "','" & Me.cuid.Text & "','" & Me.cpass.Text & "','" & Me.cdue.Text & "' )"
cmd.ExecuteNonQuery()
Me.reloaddata()
cnn.Close()
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
cid.Text = "cid"
cname.Text = "cname"
cproj.Text = "cpro"
cdmn.Text = "domain"
chost.Text = "chost"
csms.Text = "sms"
cmain.Text = "main"
codt.Text = "codt"
camnt.Text = "mount"
cldt.Text = "last"
cndt.Text = "next"
cdue.Text = "due"
cuid.Text = "uid"
cpass.Text = "pass"
End Sub
末级
好的,问题解决了!!我刚刚在字段中添加了[]
资料来源:
如果不知道每个
.Text
值中包含的内容,也不知道要填写的表的定义,就很难说问题出在哪里。但是我可以冒险猜测,Me.camnt.Text
和Me.cdue.Text
可能不想被单引号包围;也就是说,你可能需要这样的东西
Me.codt.Text & "'," & Me.camnt.Text & ",'" & Me.cldt.Text
及
您的
date
字段是一个关键字。您必须将其放在括号中:[date]
。此外,任何带有空格的字段名也需要括号:[Order date]
您确实应该使用参数来避免SQL注入,并解决更新数据库时的许多其他问题
我还避免尝试管理数据库的连接状态。只需使用Using
语法,即可始终关闭连接
If Me.cid.Text = "" Then
MessageBox.Show("Please input values")
Else
Using con As New OleDb.OleDbConnection("...")
con.Open()
Using cmd As New OleDb.OleDbCommand()
cmd.Connection = con
cmd.CommandText = "..."
cmd.Parameters.AddWithValue("@ID", Me.cid.Text)
cmd.Parameters.AddWithValue(...more)
cmd.ExecuteNonQuery()
End Using
End Using
reloaddata()
End If
form1_load部分中已经添加了新连接、提供程序等。如果不处理命令和SQL语句,则易受SQL注入、池连接对象(但不包括占用大部分开销的连接)的攻击,在确定是谁进行查询之前,打开连接没有意义…codt.Text、cldt.Text、cndt.Text的格式是什么?您收到了什么错误消息?我已重建数据库并将日期更改为订单日期。。但问题仍然发生在“INSERT INTO语句中的语法错误”。@Ravikant若你们不打算使用参数,你们将不得不正确地使用单引号。我在一开始就发现缺少一个:
值(“&Me.cid.Text&”,“
应该是值(“&Me.cid.Text&”,“
@Ravikant),您必须在带有空格的字段名周围放上括号[]:[订单日期]
me.camnt.text包含要插入mdb文件中的值。@Ravikant,是的,我很感激。问题是,如果它们是数字,并且要填充的列是数字列,则不需要引号。
If Me.cid.Text = "" Then
MessageBox.Show("Please input values")
Else
Using con As New OleDb.OleDbConnection("...")
con.Open()
Using cmd As New OleDb.OleDbCommand()
cmd.Connection = con
cmd.CommandText = "..."
cmd.Parameters.AddWithValue("@ID", Me.cid.Text)
cmd.Parameters.AddWithValue(...more)
cmd.ExecuteNonQuery()
End Using
End Using
reloaddata()
End If