2012-09-21 72 views
1

我一直在網上搜索動態查詢的解決方案。我發現了許多不同的解決方案(例如Linq to Sql,動態Linq表達式,動態查詢),但所有這些解決方案都涉及某種數據庫的先前知識(如代碼中的模型)。也許我所要求的是遠離深層,但是有沒有任何可能的方式來動態查詢數據庫沒有模型?沒有數據庫模型的C#動態查詢

例如,數據庫有一個Customers表具有以下的列:

  • 客戶ID
  • 名稱
  • FavoriteColor

我想創建一個查詢作爲SELECT Name FROM Customers WHERE @0 = @1,其中兩個佔位符被動態地填充。結果數據不會綁定到模型類,我更願意使用某種框架來構建查詢,而不是簡單的字符串連接。

System.Linq.Dynamic命名空間非常接近實現此請求,但它使用數據庫模型。

我意識到這很瘋狂,但我只是好奇。

+0

這不是瘋了。你的數據庫有什麼特色?根據需要支持的後端,有幾種方法。 –

+0

數據庫是SQL Server 2008。 – hitopp

回答

0

SQL查詢參數只能取代文字值。您 不能使用表名,列名,值列表, 或其他SQL語法的參數。這是所有品牌的 數據庫的標準SQL行爲。

你不能讓你的列名的動態,據我所知,人們可以想到做這個動態查詢的唯一方法是結合使用類似string.FormatStringBuilder一些正則表達式/規則,檢查是否如果columnName是用戶的直接輸入,那麼columnName是一個有效的名稱。如果它受到你的控制,那麼它不應該是擔心的因爲你可以放心,不會是SQL注入。如果用戶負責提供列名,請確保將用戶輸入映射到代碼中的某個列名。

現在參數本身可以參數化,並且您可以使用SqlCommand類堅持使用普通的舊ADO.NET,然後添加參數以動態查詢。這裏是你可以參考一個相同的資源:http://www.csharp-station.com/Tutorial/AdoDotNet/lesson06

希望這有助於..