我試圖Visual Studio 2010中另一個沒有爲一個或多個必需參數問題
我在運行時創建一個選擇查詢應返回1行中在VB中取出數據的訪問數據庫的給定值。然後我從返回的行中收集數據並將其放置在屏幕上。
此生成該查詢的代碼。
Dim ls_querystring as string
ls_querystring = "SELECT Horses.Name, "
ls_querystring = ls_querystring & "Horses.Horseid, "
ls_querystring = ls_querystring & "Horses.Regno, "
ls_querystring = ls_querystring & "Horses.HorseType, "
ls_querystring = ls_querystring & "Horses.Sex, "
ls_querystring = ls_querystring & "Horses.Colour, "
ls_querystring = ls_querystring & "Horses.Ownerid, "
ls_querystring = ls_querystring & "Horses.Notes, "
ls_querystring = ls_querystring & "Horses.Sireno, "
ls_querystring = ls_querystring & "Horses.Damno, "
ls_querystring = ls_querystring & "Horses.Birthdate, "
ls_querystring = ls_querystring & "Horses.DNA, "
ls_querystring = ls_querystring & "Horses.Inscribe, "
ls_querystring = ls_querystring & "Horses.Revised, "
ls_querystring = ls_querystring & "Horses_1.Name as SireName, "
ls_querystring = ls_querystring & "Horses_2.Name as DamName, "
ls_querystring = ls_querystring & "Horses.IMAGE, "
ls_querystring = ls_querystring & "Associates.Name1 as Breeder "
ls_querystring = ls_querystring & " FROM ((Horses INNER JOIN Horses AS
Horses_1 ON Horses.Sireno = Horses_1.Regno) INNER JOIN Horses AS Horses_2 "
ls_querystring = ls_querystring & " ON Horses.Damno = Horses_2.Regno) INNER
JOIN Associates ON Horses.Breederid = Associates.AssocID "
ls_querystring = ls_querystring & " WHERE Horses.Regno = "
& Chr(34) & ls_RegNo & Chr(34)
變量ls_Regno被定義爲一個字符串,並且在創建ls_querystring時具有一個值。
在運行此ls_querystring包含:
SELECT Horses.Name, Horses.Horseid, Horses.Regno, Horses.HorseType,
Horses.Sex, Horses.Colour, Horses.Ownerid,
Horses.Notes, Horses.Sireno, Horses.Damno, Horses.Birthdate, Horses.DNA,
Horses.Inscribe,
Horses.Revised, Horses_1.Name as SireName, Horses_2.Name as DamName,
Horses.IMAGE,
Associates.Name1 as Breeder
FROM ((Horses INNER JOIN Horses AS Horses_1 ON Horses.Sireno =
Horses_1.Regno)
INNER JOIN Horses AS Horses_2 ON Horses.Damno = Horses_2.Regno)
INNER JOIN Associates ON Horses.Breederid = Associates.AssocID
WHERE Horses.Regno = "SO0324"
如果我運行這個反對它返回預期單列Access數據庫。
但是,當我將它包含在下面的代碼中時,它會失敗, 在da.Fill(datat)語句中沒有給出一個或多個必需參數問題消息的值。
Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\Web\horsebook.mdb")
Dim datat As New DataTable
Dim da As New OleDbDataAdapter(ls_querystring, cn)
da.Fill(datat)
da.Dispose()
cn.Dispose()
如果我更換由ls_querystring進程與良性腳本生成的查詢,如「選擇從馬*」它的工作原理沒有問題。所以看起來問題出現在查詢生成中,但是如果只是在訪問中運行,那麼它會按預期工作,這使我感到困惑。
所以這樣看來,有是訪問接受並通過一個OleDbDataAdapter提交到同一個數據庫查詢之間的脫節。
我會很感激,如果任何人都可以看到我的方式錯誤。
謝謝
難道是因爲在使用'Fill()'時缺少參數嗎? [MSDN](https://msdn.microsoft.com/en-us/library/system.data.common.dataadapter.fill(v = vs.110).aspx)不顯示只接受數據表。另外,確保一切都是[拼寫正確並且正確的情況](https://stackoverflow.com/questions/2378763/no-value-given-for-one-or-more-required-parameters?rq=1)。也許你在SELECT中拼寫錯誤的列名引用。 –
'.Name' - 名稱是保留字,請嘗試使用'。[Name]'或(更好)避免此列名稱。這也可能適用於'.IMAGE'。 – Andre
P.S. +1包含實際生成的SQL,所以很少有人在提出有關動態SQL的問題時這樣做。 – Andre