0

我想实现一个功能,允许用户输入如下内容:

"select * from products where low(price);" 

等于:

"select * from products where (price >=0) And (price <= 50);"

您是否知道任何对我有用的解决方案?我的第二个问题是我应该在应用程序结构的哪个位置进行转换?在应用程序代码中还是在数据库中?

我的应用程序是用 C# 编写的,并通过 ADO.NET 连接到 SQL Server 2008。

我会非常感谢任何提示、伪代码等。

提前致谢 !

4

1 回答 1

2

SQL Server 允许您定义用户定义的函数(参见例如这篇文章)。如果您定义了一个函数low,那么您编写的第一个代码将是一个完全有效的 SQL 查询,您根本不需要进行任何预处理。声明大致如下所示:

 CREATE FUNCTION low(@price)
 RETURNS boolean AS
 BEGIN
   RETURN (@price >= 0) AND (@price <= 50)
 END

如果您想允许更多的模糊语言而不仅仅是函数调用,那么这将是另一个(并且明显更复杂)的问题。我不知道有任何库可以做到这一点,并且自己实现它可能是一个很大的挑战。(您可能需要添加更多示例,以便我们了解您的意思)。

当然,如果您允许用户编写原始 SQL 查询,则该用户应该是您可以信任的人(因为他们可以轻松地从您的数据库中删除所有数据)。

于 2011-03-19T21:02:35.253 回答