在我的C#asp.net webform上我有一個搜索頁面,其中大約有20個元素「可以」用作搜索的一部分。稍後會添加更多內容。C#asp.net從viewstate動態構建SQL查詢
我所做的是擴展的文本框,下拉列表框,包括幾個變量:
字段名:Tablename.columnname DBTYPE:DbType.Int32 Joinparam:LEFT JOIN上otherTable ON XY = AB
這些都存儲在視圖狀態並加載回來。我這樣做的原因是,我可以遍歷所有控件並提取所有類型的控件。然後,我可以驗證它們,確保它們有輸入並且類型正確。如果是的話,我可以將它們傳遞給數據庫訪問層,並讓代碼動態生成SQL語句。
我不讓任何東西,但SELECT語句從此發生。選擇並返回的字段不能更改,我使用dbparameter嘗試並避免sql注入。
我的擔心是我把表和字段名稱,將用於搜索條件和JOINS需要所有的視圖狀態。這是一個真正的壞主意嗎?
我可以通過只在表中存放一些int索引來阻止這種情況,這些表將數據保存在數據庫中,但這仍然需要放入視圖狀態,這意味着它們會有一個額外的層。
我之所以採用這種方法,是因爲我不想在數據庫層中放置大量的IF語句來在那裏構建語句。這將是醜陋的地獄和一個痛苦的維持。
感謝您對此的任何建議。
喬恩
編輯
感謝所有的建議。謝天謝地,這個應用程序只是一個內部的東西,所以損害會受到限制。但是我絕不會再使用這種技術,而是會改用搜索模板的想法。
乾杯:)
嗨蒂凡,我可以看到你的話。我怎樣才能將你的搜索模板和網頁鬆散地鏈接起來,以便它知道哪些變量應該映射到哪裏而不會泄露任何安全問題? – Jon 2009-01-24 22:23:43