2010-06-02 65 views
1

我想检查选择语句(字符串)有效或不在c#.net,如果选择语句是正确的然后检索数据和填充下拉列表框其他下拉应该是空检查选择语句是否有效或不在c#.net

+0

这个问题没有意义。 – SLaks 2010-06-02 13:19:27

+0

您将更多的努力投入到您的问题中,您获得的答案的质量和数量就会越大。至少可以说这是不清楚的。 – 2010-06-02 13:21:07

+0

我删除了大部分标签,因为它们不正确或无意义。请解释一下自己,然后有人可以适当地重新提出问题。 – slugster 2010-06-02 13:21:12

回答

2

select语句多久会失效?似乎围绕SQL执行的简单try/catch块可能就足够了。

顺便说一句,我希望你是不是做一个应用程序,可以让别人任意SQL输入到一个盒子,你会再执行...

+0

可能会出现这样的情况:只执行SQL并处理错误是不安全的 - 假设您没有完全控制正在执行的SQL。在这种情况下,如果SQL非常糟糕(比如TRUNCATE TABLE语句),那么可能不会抛出错误,但它会执行恶意语句。因此,我认为在这种情况下按照我的答案中概述的步骤是最安全的。 – AdaTheDev 2010-06-02 13:55:14

+0

@AdaTheDev - 的确,这就是为什么我对允许某人输入任意SQL的评论。非常危险。 – 2010-06-02 14:47:16

2

一种方法覆盖大多数情况下被执行SQL与SET FMTONLY ON

例如

SET FMTONLY ON; 
SELECT SomeField FROM ExampleQuery 

从BOL,SET FMTONLY:只有

元数据返回给客户端。 可以用于测试 响应的格式,但不实际运行 query.query。

如果查询无效,则会出错。您还可以检查结果以确定返回的结果集的模式是什么(即没有模式=不是SELECT语句)。

更新: 总体而言与SQL打交道要防止SQL注入有你应该考虑其他的事情时:

  1. 避免动态SQL(串联用户输入的值成一个要执行的SQL字符串)。改用参数化的SQL。
  2. 将查询封装为嵌套查询。例如

    SELECT * FROM(SELECT一些东西ADynamicQueryThatsBeenGenerated)×

因此,如果查询包含多个命令,这将导致一个错误。即当封装为嵌套查询时,这将导致无效查询:

SELECT SomethingFrom FROM MyTable;TRUNCATE TABLE MyTable 
+1

'SELECT SomethingFrom FROM MyTable); TRUNCATE TABLE MyTable; - ' – SLaks 2010-06-02 17:04:03