我正在用C#编写WinForms应用程序,目的是从SQL服务器上的聚合数据中选择视图。关键是使用System.Windows.Forms.DataVisualization.Charting命名空间从视图生成图表。
截至目前,我在相关数据库中选择视图名称并将其列出给用户,提示他们选择一个,然后指定哪些列应该在哪个轴上。我的问题是制定一个查询来选择适当的视图。该应用程序将仅在内部使用,所以公平,注入漏洞不是一个大问题,但我真的不想动态构建查询字符串,因为我知道它是一种非常糟糕的做事方式。
我查看了参数化查询和存储过程,但它们不允许您参数化表名(出于好的原因,我可以告诉)。这让我陷入两难境地。我想我可以为所有视图制作存储过程,但这似乎是一个笨拙的解决方案。有没有更好的办法?我应该重写整个想法吗?
答案 0 :(得分:0)
您可以通过在代码中创建SQL语句来执行此操作,也可以创建一个存储过程,您可以在其中传递视图的名称和要选择的列的列表。在这两种方法中,我更喜欢第二种方法。除了这些,现在我想不出任何其他方式。但是你可以做一些额外的事情来防止注射:
彻底验证输入。
创建新用户并为该用户提供最少的权限。只是视图的SELECT
权限。使用此用户与数据库通信。