我正在编写小型VB.Net应用程序,该应用程序应根据从某些外部MDB文件(Access 2007)收集的数据构建报告。计划此应用程序将使用参数化SQL查询来收集数据。这些查询的参数之一是外部MDB文件的路径。
以下是示例代码:
Dim conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=C:\Temp\Temp.mdb;")
conn.Open()
Dim cmd As New OleDbCommand()
cmd.Connection = conn
cmd.CommandType = CommandType.Text
cmd.CommandText = "SELECT * INTO Trend FROM TI IN '?' WHERE TI.Id=?;"
With cmd.Parameters
.Add("@p1", OleDbType.VarChar).Value = "C:\Temp\Source.mdb"
.Add("@p2", OleDbType.Integer).Value = 5
End With
cmd.ExecuteNonQuery()
conn.Close()
看起来很简单,但不起作用。启动后,我的应用程序抛出异常 - System.Data.OleDb.OleDbException:磁盘或网络错误。
花了一整天时间让它工作没有成功。我做错了什么?
答案 0 :(得分:1)
这是其他人建议的评论是这个问题的答案:
Access / Jet / ACE FROM子句中的任何内容都不可参数化(当然,除非它在子查询中)。
使用Access / Jet / ACE,您唯一的选择是使用其他方法即时编写FROM子句。