2013-07-26 54 views
0

我正在用C#編寫WinForms應用程序,目的是從SQL Server上的聚合數據視圖中進行選擇。重點是使用System.Windows.Forms.DataVisualization.Charting命名空間從視圖生成圖表。將SQL視圖(動態)加載到WinForms應用程序中

截至目前,我在相關數據庫中選擇視圖名稱,並將它們列出給用戶,提示他們選擇一個,然後指定哪些列應在哪個軸上進行。我的問題是制定一個查詢來選擇適當的視圖。該應用程序只會在內部使用以保持公平,注入漏洞並不是一個大問題,但是我並不想動態構建查詢字符串,因爲我知道這是一種非常糟糕的做事方式。

我查看了參數化查詢和存儲過程,但它們不允許您參數化表名(出於我所知道的很好的原因)。這讓我陷入兩難境地。我想我可以爲所有視圖製作存儲過程,但這似乎是一個笨拙的解決方案。有沒有更好的辦法?我應該修改整個想法嗎?

+0

這就是爲什麼我們有Entity Framework和LINQ可供我們使用。 – jfrankcarr

+0

@jfrankcarr我還沒有在C#中使用LINQ,但快速瀏覽讓我覺得這正是我需要的。將更多地看着它,並返回! – kai

回答

0

您可以通過在代碼中創建SQL語句來完成它,或者您可以創建一個存儲過程,您可以在其中傳遞視圖的名稱和要選擇的列的列表。在這兩種方法中,我更喜歡第二種方法。除了這些之外,現在我想不出有任何其他的做法。然而,你可以做一些額外的事情,以防止注射:

  • 徹底驗證輸入。

  • 創建一個新用戶並給這個用戶最少的權限。只是SELECT特權的意見。使用此用戶與數據庫交談。

+0

有一個用戶打算用於這個應用程序(除其他外),它只具有讀權限並且只有少數相關的dbs。該應用程序允許您通過loginform自己格式化連接字符串,因此理論上應用程序可以使用具有寫入/執行權限的SqlConnection運行。儘管如此,它仍然是一個內部應用程序,所以安全問題並不是什麼大不了的事情,更重要的是我想盡可能編寫一個可靠的應用程序。 – kai

相關問題