我有一個vb.net項目中有一個更新函數,其中我通過保存按鈕單擊方法將值傳遞給數據庫SQL函數。這個查詢有什麼問題?我提供了所有參數的值
在我正在更新的數據庫表中,有10個字段。正如您在下面的查詢中看到的,我提供了10個值,每個字段一個值。
然而,儘管如此,當它擊中行Dc.ExecuteNonQuery()
,它輸出錯誤
沒有爲一個或多個必需參數
給定值
我不能工作了,爲什麼 - 任何人可以其他?
Public Shared Function UpdateFreight(ByVal OrderNumber As Integer, _
ByVal OrderRef As String, _
ByVal FreightNum As Integer, _
ByVal FreightVal As Double, _
ByVal FreightDesc As String, _
ByVal ProductCode As String, _
ByVal EstDelivery As DateTime, _
ByVal SCode As String, _
ByVal CCode As String, _
ByVal AddressCode As String, _
con As OleDbConnection)
Try
Dim Dc As New OleDbCommand
Dc.Connection = con
Dc = New OleDb.OleDbCommand("UPDATE [Order_Freight] SET [Order_Number] = ?, _
[Order_Reference] = ?, _
[Freight_Number] = ?, [Freight_Val] = ?, _
[Freight_Desc] = ?, [Product_Code] = ?,_
[Est_Delivery] = ?, [Supplier_Code] = ?, _
[Customer_Code] = ?, [Address_Code] = ? _
WHERE [OrderNumber] = ?", con)
Dc.Parameters.AddWithValue("@ono", OrderNumber)
Dc.Parameters.AddWithValue("@oref", OrderRef)
Dc.Parameters.AddWithValue("@fnum", FreightNum)
Dc.Parameters.AddWithValue("@fval", FreightVal)
Dc.Parameters.AddWithValue("@fdesc", FreightDesc)
Dc.Parameters.AddWithValue("@pcode", ProductCode)
Dc.Parameters.AddWithValue("@estd", EstDelivery)
Dc.Parameters.AddWithValue("@scode", SCode)
Dc.Parameters.AddWithValue("@ccode", CCode)
Dc.Parameters.AddWithValue("@acode", AddressCode)
Dc.Parameters.AddWithValue("@onum", OrderNumber)
Dc.ExecuteNonQuery()
Catch ex As Exception
errorLog(ex)
MsgBox("Failed to update data, refer to error log")
Throw
End Try
End Function
如果有幫助,這是那裏的函數被調用
database.UpdateFreight(OrderNumber, OrderRef, FNum, FreightVal, FreightDesc, PCode, EstDate, SCode, custCode, Address, con)
,並澄清所有的參數都被給定的值
(此外,與代碼格式無關,爲了可讀性,我已經調整了格式離子,它看起來並不像這樣在VB)
當您調試時,您可以在調用ExecuteNonQuery之前打開'Dc.Parameters'來查看所有參數的值?在那裏失蹤?任何無序? – Brad
你的sql語句不需要命名參數嗎? 「set [Order_Number] =:ono」(或任何正確的訪問語法)?看過我們的代碼庫後,它看起來像將它們添加到參數集合中而不是@然後用冒號在sql中指定它們。 –
這就是你的代碼的確切方式 - 即,你確定你沒有改變更多的格式嗎?我只問,因爲你正在初始化'Dc'兩次,這似乎有點奇怪。你的SQL字符串在這個問題上也有點奇怪 - 它有'_'延續字符,但是每一行都沒有終止,並且沒有連接'&'。 – Mark