2011-06-10 51 views
1

我正在寫小型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

檢查文件「C:\ Temp \ Temp.mdb」是否存在,如果存在,則通過本文:http://support.microsoft.com/kb/q251254/ – Chandu 2011-06-10 14:12:34

+0

檢查此鏈接。 http://www.mikesdotnetting.com/Article/26/Parameter-Queries-in-ASP.NET-with-MS-Access – Jack 2011-06-10 14:15:58

+0

是的,看過這篇文章。沒有運氣。它似乎與第一個參數有某種聯繫,因爲當我排除第一個參數並用**「SELECT * INTO TREND FROM TI IN'C:\ Temp \ Source.mdb'替換** CommandText **值時,TI.IdentKp = ?「**它的工作原理像是魅力/ – me9a6yte 2011-06-10 14:17:57

回答

1

這是其他人所說的註釋是問題的答案:在Access /噴氣/ ACE

沒有FROM子句是參數化(除非它是一個子查詢中,當然)。

使用Access/Jet/ACE,您唯一的選擇是使用其他方法即時編寫FROM子句。