这是我在调试时收到的错误。
{"Syntax error in string in query expression ''Laptop);'."}
这是我的SQL语句无法正常工作。无论我做什么,它似乎都是随机添加的。在声明的最后,我不知道为什么会这样做。
Sql = "INSERT INTO Devices ( [Asset Number], [Service Tag], Manufacturer, ModelName, Location, Room, Cart, [Purchase Date], Department, [Device Type] ) VALUES('" & AssetNum & "','" & ServTag & "','" & Manu & "','" & Model & "','" & Location & "','" & Room & "','" & Cart & "','" & PurchDate & "','" & Department & "','" & DeviceType & ");"
这是我所做的声明很好的声明。它只是一个长字符串值。我需要上述变量才能工作的原因是因为它们与文本框相关联,因此用户可以输入数据。
Sql = "INSERT INTO Devices ( [Asset Number], [Service Tag], Manufacturer, ModelName, Location, Room, Cart, [Purchase Date], Department, [Device Type] )VALUES (10, 1234, 'Dell', 'Latitude E6410', 'John McIntire', 100, 0, '5/17/2015', 'Technology', 'Laptop');"
所以是的,基本上我被卡住了,无法弄清楚为什么第一个查询不起作用。我现在已经坚持了一段时间,并且真的可以使用一些帮助。
这就是我执行查询的方式。
cmd = New OleDb.OleDbCommand(Sql)
cmd.Connection = dbConn
cmd.ExecuteNonQuery()
答案 0 :(得分:4)
您在结尾处缺少单引号以关闭DeviceType之前的那个:
"','" & DeviceType & ");"
添加它并解决您的问题:
"','" & DeviceType & "');"
无论如何,您目前所拥有的内容很容易受到SQL注入的攻击,而parameterizing您的查询实际上是您应该采取的解决方法。
答案 1 :(得分:3)
您错过了查询中最后一个字段的尾随单引号,但只是添加引号实际上是错误解决此问题的方法。你应该这样做:
Sql = "INSERT INTO Devices (" &
"[Asset Number], [Service Tag], Manufacturer, ModelName, Location, Room, Cart, [Purchase Date], Department, [Device Type]" &
") VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"
Using cmd AS New OleDb.OleDbCommand(Sql, dbConn)
'Have to guess at column types/lengths here. Use actual types/lengths from your DB
cmd.Parameters.Add("@AssetNum", OleDbType.VarChar, 10).Value = AssetNum
cmd.Parameters.Add("@ServTag", OleDbType.VarChar, 10).Value = ServTag
cmd.Parameters.Add("@Manu", OleDbType.VarWChar, 20).Value = Manu
cmd.Parameters.Add("@Model", OleDbType.VarWChar, 30).Value = Model
cmd.Parameters.Add("@Location", OleDbType.VarWChar, 50).Value = Location
cmd.Parameters.Add("@Room", OleDbType.Integer).Value = Room
cmd.Parameters.Add("@Cart", OleDbType.Integer).Value = Cart
cmd.Parameters.Add("@PurchDate", OleDbType.Date).Value = PurchDate
cmd.Parameters.Add("@Department", OleDbType.VarWChar, 20).Value = Department
cmd.Parameters.Add("@DeviceType", OleDbType.VarChar, 20).Value = DeviceType
cmd.ExecuteNonQuery()
End Using
这对你有四件事:
PurchDate
查询参数,而无需关心格式。