0

我正在用 C# 编写一个 WinForms 应用程序,目的是从 SQL 服务器上的聚合数据视图中进行选择。重点是使用 System.Windows.Forms.DataVisualization.Charting 命名空间从视图生成图表。

到目前为止,我选择了相关数据库中的视图名称并将它们列出给用户,提示他们选择一个,然后指定哪些列应该放在哪个轴上。我的问题是制定查询以选择适当的视图。该应用程序将仅在内部使用,因此公平地说,注入漏洞并不是什么大问题,但是我真的不想动态构建查询字符串,因为我知道这是一种非常糟糕的做事方式。

我研究了参数化查询和存储过程,但它们不允许您参数化表名(据我所知,这是有充分理由的)。这让我进退两难。我想我可以为所有视图创建存储过程,但这似乎是一个笨拙的解决方案。有没有更好的办法?我应该重新设计整个想法吗?

4

1 回答 1

0

您可以通过在代码中创建 SQL 语句来做到这一点,或者您可以创建一个存储过程,您可以在其中传递视图的名称和要选择的列列表。在这两种方法中,我更喜欢第二种方法。除了这些,现在我想不出任何其他的方式来做到这一点。但是,您可以做一些额外的事情来防止注入:

  • 彻底验证输入。

  • 创建一个新用户并赋予该用户最少的权限。只是SELECT意见的特权。使用此用户与数据库对话。

于 2013-07-26T10:32:56.153 回答