OleDbCommand 參數順序與優先權:期望不一致的情況
使用OleDbCommand 建構查詢時,確保參數順序準確至關重要遵循SQL語句中的順序。一個常見的誤解是假設命名參數消除了這個要求。然而,正如深入偵錯會話所揭示的那樣,當 CommandType 設定為 Text 時,OleDbCommand 缺乏對命名參數的支援。
在給定的範例中:
SELECT * FROM tblSomeThing WHERE id = @id AND debut = @dtDebut AND fin = @dtFin
參數加在順序如下:
cmd.Parameters.Add("@id", OleDbType.Integer).Value = idSociete; cmd.Parameters.Add("@dtFin", OleDbType.Date).Value = dateTraitementFin; cmd.Parameters.Add("@dtDebut", OleDbType.Date).Value = dateTraitementDebut;
但是沒有回傳結果,說明不一致。重新排序參數以符合 SQL 語句後,查詢將成功執行:
cmd.Parameters.Add("@id", OleDbType.Integer).Value = idSociete; cmd.Parameters.Add("@dtDebut", OleDbType.Date).Value = dateTraitementDebut; cmd.Parameters.Add("@dtFin", OleDbType.Date).Value = dateTraitementFin;
這與 http://msdn.microsoft.com/en-us/library/system.data 上的文件一致。 oledb.oledbcommand.parameters.aspx,它明確指出 OleDbCommand 不支援文字模式下 SQL 語句的命名參數。相反,必須使用問號 (?) 佔位符,並且集合中 OleDbParameter 物件的順序必須嚴格對應於它們在命令文字中的位置。
以上是當 CommandType 為 Text 時,OleDbCommand 參數順序重要嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!