怎样在C#中检查mysql 的sql语句是否正确!

qq_29508847 2017-06-21 09:46:04
怎样在c#代码中,不执行语句的前提下检查mysql的sql的正确性?各位大神帮帮忙!
SQL Server的检查我已经写出来了。
bool bResult;
using (SqlConnection conn = new SqlConnection($"Data Source={ser};Initial Catalog={db};User ID={na};PWD={pw}"))
{
using (SqlCommand cmd = new SqlCommand())
{
if (conn.State != ConnectionState.Open)
conn.Open();

// cmd.ExecuteNonQuery();
try
{
cmd.Connection = conn;
cmd.CommandText = "SET PARSEONLY ON";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
bResult = true;
}
catch (Exception ex)
{
MessageBox.Show("SQL语法错误!");
bResult = false;
}
finally
{
cmd.CommandText = "SET PARSEONLY OFF";
cmd.ExecuteNonQuery();
}
}
}
return bResult;
...全文
793 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
flm320 2017-06-23
  • 打赏
  • 举报
回复
mysql 用explain sql 如果是oracle使用explain plan,这样语法合法会显示执行计划,不合法会有错误提示!
巴士上的邂逅 2017-06-21
  • 打赏
  • 举报
回复
引用 19 楼 closurer 的回复:
[quote=引用 18 楼 yuankaiwsl 的回复:] 不进数据库怎么知道数据库里有没有这个表,表里有没有这个字段?
sql server 的分析功能,也仅仅是做语法检查,不检查对象是否存在的。 [/quote]
闭包客 2017-06-21
  • 打赏
  • 举报
回复
引用 18 楼 yuankaiwsl 的回复:
不进数据库怎么知道数据库里有没有这个表,表里有没有这个字段?
sql server 的分析功能,也仅仅是做语法检查,不检查对象是否存在的。
巴士上的邂逅 2017-06-21
  • 打赏
  • 举报
回复
不进数据库怎么知道数据库里有没有这个表,表里有没有这个字段?
闭包客 2017-06-21
  • 打赏
  • 举报
回复
引用 14 楼 qq_29508847 的回复:
[quote=引用 12 楼 正怒月神的回复:][quote=引用 6 楼 qq_29508847 的回复:] [quote=引用 4 楼 正怒月神的回复:]貌似没什么太好的方案。不然还要try catch干嘛
select好说,insert,update,delete,不是一执行就操作数据库了。[/quote] 大哥,如果insert,update,delete操作成功了,那说明语句是正确合法的。不然还是要进catch。 数据库也不知道你正在增删改的数据,并不是你想要的吧?[/quote] 错了进catch,对了,我不想进数据库,[/quote] 你的方法就是进了数据库的好吗?
qq_29508847 2017-06-21
  • 打赏
  • 举报
回复
引用 15 楼 巴士上的邂逅的回复:
增删改时用事务,能运行到最后就说明SQL语句正常,最后就回滚
这也是一个方法。
巴士上的邂逅 2017-06-21
  • 打赏
  • 举报
回复
增删改时用事务,能运行到最后就说明SQL语句正常,最后就回滚
qq_29508847 2017-06-21
  • 打赏
  • 举报
回复
引用 12 楼 正怒月神的回复:
[quote=引用 6 楼 qq_29508847 的回复:] [quote=引用 4 楼 正怒月神的回复:]貌似没什么太好的方案。不然还要try catch干嘛
select好说,insert,update,delete,不是一执行就操作数据库了。[/quote] 大哥,如果insert,update,delete操作成功了,那说明语句是正确合法的。不然还是要进catch。 数据库也不知道你正在增删改的数据,并不是你想要的吧?[/quote] 错了进catch,对了,我不想进数据库,
qq_29508847 2017-06-21
  • 打赏
  • 举报
回复
引用 9 楼 闭包客的回复:
你是用了 sql server 的解析语句接口,在 mysql 上能不能实现,要看 mysql 有没有这样的编程接口。如果没有,你要写一个解析器。
SQL server的语法检查已经实现了,mysql的没实现。我这功能要支持好几种数据库
正怒月神 2017-06-21
  • 打赏
  • 举报
回复
引用 6 楼 qq_29508847 的回复:
[quote=引用 4 楼 正怒月神的回复:]貌似没什么太好的方案。不然还要try catch干嘛
select好说,insert,update,delete,不是一执行就操作数据库了。[/quote] 大哥,如果insert,update,delete操作成功了,那说明语句是正确合法的。不然还是要进catch。 数据库也不知道你正在增删改的数据,并不是你想要的吧?
qq_29508847 2017-06-21
  • 打赏
  • 举报
回复
引用 7 楼 Mr-Robot的回复:
[quote=引用 6 楼 qq_29508847 的回复:] [quote=引用 4 楼 正怒月神的回复:]貌似没什么太好的方案。不然还要try catch干嘛
select好说,insert,update,delete,不是一执行就操作数据库了。[/quote] 操作数据库也没有关系啊,你生产环境使用的是测试数据库,又不是正式环境的数据库[/quote] 我这要实现的功能可以算是一个高级功能了。是提供给有一定技术的人员,可以去写sql语句。写完之后,总归要检查一下吧!
闭包客 2017-06-21
  • 打赏
  • 举报
回复
有人知道有什么 C# 写的 sql 解析器吗?
闭包客 2017-06-21
  • 打赏
  • 举报
回复
你是用了 sql server 的解析语句接口,在 mysql 上能不能实现,要看 mysql 有没有这样的编程接口。如果没有,你要写一个解析器。
用戶ID080 2017-06-21
  • 打赏
  • 举报
回复
同问 。
  • 打赏
  • 举报
回复
引用 6 楼 qq_29508847 的回复:
[quote=引用 4 楼 正怒月神的回复:]貌似没什么太好的方案。不然还要try catch干嘛
select好说,insert,update,delete,不是一执行就操作数据库了。[/quote] 操作数据库也没有关系啊,你生产环境使用的是测试数据库,又不是正式环境的数据库
qq_29508847 2017-06-21
  • 打赏
  • 举报
回复
引用 4 楼 正怒月神的回复:
貌似没什么太好的方案。不然还要try catch干嘛
select好说,insert,update,delete,不是一执行就操作数据库了。
by_封爱 版主 2017-06-21
  • 打赏
  • 举报
回复
只有执行一下 看有没有异常 才知道是否有错误..
正怒月神 2017-06-21
  • 打赏
  • 举报
回复
貌似没什么太好的方案。不然还要try catch干嘛
exception92 2017-06-21
  • 打赏
  • 举报
回复
引用 2 楼 duanzi_peng 的回复:
不执行语句 只能用眼看了。
http://www.cnblogs.com/sosoft/p/3906136.html
exception92 2017-06-21
  • 打赏
  • 举报
回复
不执行语句 只能用眼看了。
加载更多回复(4)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧