2013-07-26 48 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

相关问题