假設我有一個用於查找項目的搜索屏幕。屏幕上有各種可選的搜索選項,這些選項會導致SQL查詢語句發生變化。有沒有辦法創建一個接受<= N參數的參數化查詢或存儲過程?
下面是一些例子搜索:
- 說明搜索
- 說明搜索+項目的供應商ID
- 說明搜索+項目的供應商ID +項目層級1號
- 說明搜索+項目供應商id +物品層次結構級別1 id +級別2 id
- 物品層次結構級別1 id +級別2 id(沒有說明,沒有物料供應商ID)
......你明白了。有很多可能的組合。我希望能夠使用參數化查詢來獲得性能優勢等(另外,我將它們用於整個程序中的其餘查詢)。
有沒有辦法做到這一點,或者我不得不創建每個可能的查詢並匹配SQLiteCommand對象或基於選擇的選項動態地使用StringBuilder構建查詢字符串?
我正在使用C#3.0(在3.5緊湊框架上)使用SQLite.NET數據提供程序。
更新基於一些與該參數的空默認值,並使用(@param isnull or column = @param)
建議
,我想我應該能得到這個工作。我會及時向大家發佈。
注意:我避免使用存儲過程,因爲其餘代碼使用參數化查詢而不是存儲過程。我想保持一切爲了未來維護程序員的健康。無論如何,它不應該有太大的區別。
更新2
這是一個桌面系統上的工作大(這是我做了我的查詢初始測試)。但是,它在我使用的Windows CE設備上非常慢。不可思議的緩慢。所有相同的,我可以肯定將來使用它,它非常方便。僅在移動設備上運行查詢時才適用。
謝謝
我會告訴你如何動態地建立你的查詢,但然後參數注入警察會在我之後。 – 2009-07-15 18:50:05
問題的標題是可變數量的參數。但似乎你需要一個具有N個參數但可以接受N或
shahkalpesh
2009-07-15 18:53:36
@Robert我知道如何動態構建它們,這將避免許多查詢情況......但我不想這樣做的原因之一是因爲SQL注入=) – 2009-07-15 18:56:33