【发布时间】:2016-01-27 02:50:22
【问题描述】:
我注意到以下二进制数据插入在连接到 MSAccess 2010 时可以正常工作,但是在连接到 SQL Server Express 2012 时,我收到错误消息。代码如下:
Public Shared Sub InsertBlobs(ByRef hash As Hashtable)
Dim constring As String
Select Case CONNECTION_TYPE
Case DBConnection.MS_Access07
constring = "Provider=Microsoft.Ace.OLEDB.12.0;" & _
"User ID=Admin;" & _
"Data Source=" & ACCESS07_CONNECTION_STRING & ";" & _
"Mode=Read|Write;Extended Properties="""";Jet OLEDB:System Database="""";" & _
"Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=0;" & _
"Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;" & _
"Jet OLEDB:New Database Password="""";Jet OLEDB:Create System Database=False;" & _
"Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;" & _
"Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False"
Case DBConnection.MS_SQL
constring = "Provider=SQLOLEDB;" & getSQLConnectionString()
End Select
Try
Using myconnection As New OleDbConnection(constring)
myconnection.Open()
Dim sqlQry As String = "INSERT INTO [UAV_Archive] ([mission_id], [vehicle_plan_gzip], [msn_header]) VALUES " & _
"(@mission_id, @vehicle_plan_gzip, @msn_header)"
Using cmd As New OleDbCommand(sqlQry, myconnection)
cmd.Parameters.AddWithValue("@mission_id", CInt(hash.Item("mission_id")))
cmd.Parameters.AddWithValue("@vehicle_plan_gzip", CType(hash.Item("vehicle_plan_gzip"), Byte()))
cmd.Parameters.AddWithValue("@msn_header", CType(hash.Item("msn_header"), Byte()))
cmd.ExecuteNonQuery()
End Using
End Using
Catch ex As Exception
Dim debugBreakHere As Integer = 0
End Try
End Sub
我在 SQL Server 模式下遇到的错误是:
必须声明标量变量“@mission_id”
由于代码在我连接到 MSAccess 数据库时有效,我真的不知道如何为 SQL Server 解决这个问题。我知道我可以连接到 SQL Server,因为其他查询(选择查询)有效。我知道插入在我的帐户下工作,因为我能够进行基于字符串的插入。但我在这里步履蹒跚。
如果是数据类型问题,为什么错误与整数字段有关?
【问题讨论】:
-
正如错误消息所暗示的,在未使用 DECLARE 语句声明的脚本中使用了一个局部变量。
-
这不是数据类型问题,只是您尝试将某些东西作为参数传递,而实际上它不是参数(就 SQL Server 而言)。参数不用于常规的 SELECT/INSERT/etc 语句,它们用于过程。您需要在常规语句中实际声明变量(而不是使用具有默认数据类型的过程)。
标签: sql .net sql-server vb.net ms-access