检查SQL语句是否合法
昨天又有一个新的需求:验证文本框输入的SQL语法是否正确。
于是就开始百度,其实也挺简单的。
首先需要知道“SET PARSEONLY { ON | OFF }”。
当 SET PARSEONLY 为 ON 时,SQL Server 只分析语句。
当 SET PARSEONLY 为 OFF 时,SQL Server 编译并执行语句。
和 SET PARSEONLY 相关的还有SET NOEXEC ON,
当 SET NOEXEC 为 ON 时,SQL Server 将编译每一条Tran-SQL语句但并不执行它们。
当 SET NOEXEC 为 OFF 时,SQL Server 编译并执行语句。
现在我们就可以完成SQL语法检测的功能了。
下面是具体的代码, 可以将其中的 ParseOnly 调整为 NoExec
public static bool ValidateSQL(string sql)
{
var connStr = "server=localhost;database=jhly;user id=sa;password=1";
bool bResult;
using (SqlConnection conn = new SqlConnection(connStr))
{
using (SqlCommand cmd = new SqlCommand())
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = "SET PARSEONLY ON"; try
{
string strParams = "@starttime";
cmd.CommandText = sql;
cmd.Parameters.AddWithValue(strParams, "2010-01-01");
cmd.ExecuteNonQuery();
bResult = true;
}
catch (Exception ex)
{
bResult = false;
LogHelper.Error("SQL语法错误" + ex);
}
finally
{
cmd.CommandText = "SET PARSEONLY OFF";
cmd.ExecuteNonQuery();
}
}
}
return bResult;
}
他们之间的一些区别:
1.SET PARASEONLY 检查每个Tran-SQL 的语法并返回错误消息,不编译和执行语句。
SET NOEXEC 编译每个查询但不执行查询。
2.SET PARASEONLY 的设置是在分析时设置,不是在执行或运行时设置。
SET NOEXEC 的设置在执行或运行时设置,不是在分析时设置。
本文转自: https://blog.csdn.net/andrewniu/article/details/80166090
检查SQL语句是否合法的更多相关文章
- PHP判断SQL语句是否合法:mysqli_error()
假设现在有条update语句,有时候update语句正确,但是受影响的行数是0. 那么怎么判断这条SQL语句到底是否正确?使用 mysqli_error($Conn); create table us ...
- 基本 sql语句
1.打开数据库 int sqlite3_open( const char *filename, // 数据库的文件路径 sqlite3 **ppDb // 数据库实例 ); 2. ...
- sql语句错误
此错误一般有以下情况造成: 1.配置文件中SQL语句写的有问题 2.传参过程中没有找到sql对应的参数 解决方法: 1.检查sql语句 2.debug启动,查找与sql语句相对应的参数是否存在. 3. ...
- FP 某段SQL语句执行时间超过1个小时,并报错:ORA-01652: 无法通过 128 (在表空间 TEMPSTG 中) 扩展
一.出现如下两个错误:1.某一段SQL语句执行时间超过1个小时:2.一个小时后,提示如下错误:ORA-01652: 无法通过 128 (在表空间 TEMPSTG 中) 扩展 temp 段ORA-065 ...
- 执行超过1个小时的SQL语句
SELECT MO.MO_ID, MO.ITEM, MO.QTYORDERED, MO.PLANNEDSTARTDATE, BR.MAXLOTSIZE FROM TEMP_MO MO, (SELECT ...
- 第五篇、常用的SQL语句和函数介绍
简介: 在使用到sqlite3的时候,常常需要写一些SQL语句,现将常用到的部分语句稍微总结以下,由于个人习惯,关键字用大写. 附: /*简单约束*/ CREATE TABLE IF NOT EXIS ...
- java中的sql语句中如果有like怎么写
我先是在SQL server中写了如下语句: 这样是顺利执行的,可是我把这句话复制到Java代码中打出来却报错了, 刚开始我还以为是前端没有传回来值,待我一句一句打印发现,它提示我rs没有next.到 ...
- 如何通过outline为SQL语句指定执行计划
创建测试表 以用户jyu连接,创建测试表 SQL> conn jyu/jyu; Connected. SQL> create table t (id number, name varcha ...
- Oracle SQL语句性能优化方法大全
Oracle SQL语句性能优化方法大全 下面列举一些工作中常常会碰到的Oracle的SQL语句优化方法: 1.SQL语句尽量用大写的: 因为oracle总是先解析SQL语句,把小写的字母转换成大写的 ...
随机推荐
- Determining Whether Multitasking Is Available
[Determining Whether Multitasking Is Available] Apps must be prepared to handle situations where mul ...
- rabbitmq用户权限管理
原文地址: http://my.oschina.net/hncscwc/blog/262246 安装最新版本的rabbitmq(3.3.1),并启用management plugin后,使用默认的账号 ...
- Oracle学习笔记(九)
十二.PL/SQL 1.PL/SQL程序的结构和组成 示例:给员工涨工资(根据职位涨工资) 总裁涨1000 经理涨800 其他员工涨400 学习原因:1.操作数据库效率最高 2.为了后期的存储过程的学 ...
- Log4Net配置使用简记
1,引用Log4Net.dll .当前为2.0.8.0版,可添加Nuget包.我的办法是从下载的包中直接引用相应.net版本的dll以减小项目体积 2,在App.config中增加<sectio ...
- javascript与java的相互调用,纯java的javascript引擎rhino(转载)
1.下载Rhino安装包,下载地址:官网http://www.mozilla.org/rhino. 2.rhino环境配置,把解压出来的js.jar文件加入到系统的环境变量classpath 3.在命 ...
- polymer-developer guide-feature overview
<dom-module id='proto-element'> <template> <div>{{greeting}}</div> </temp ...
- selenium 元素可以定位到,但是无法点击问题
报错1: selenium.common.exceptions.WebDriverException: Message: Element is not clickable at point (82, ...
- C#——Socket
最近公司让我搞个socket小程序(服务端). 主要的功能:客户端发字符串到服务端,服务端接收后在界面上显示. 参照了网上许多代码,自己从中修改整理代码. public Form4() { Initi ...
- sharepoint excute power shell
Add-PSSnapin microsoft.sharepoint.powershell$UPA = Get-SPServiceApplication | ? {$_.typeName -like ' ...
- sqli-labs lession 5 之盲注型SQL入门
本文作者:Mochazz 如果所查询的用户id在数据库中,可以发现页面显示”You are in”,而不像前4关那样会显示出具体的账号密码. 如果sql语句查询结果不存在,则不会显示”You are ...