ADO.NET 中可以发送包含多个SQL语句的批处理脚本到SQL Server,但是用MySQL的ODBC驱动不行
众所周知,我们在ADO.NET中可以使用NuGet包System.Data.SqlClient来操作SQL Server,并且ADO.NET是支持向SQL Server发送包含多个SQL语句的批处理脚本的。
我们新建一个.NET Core控制台项目,然后引入下面两个NuGet包:
然后下面的代码演示了,我们使用NuGet包System.Data.SqlClient向SQL Server发送了一段包含UPDATE和INSERT语句的SQL批处理脚本:
string connectionString = "Data Source=192.168.1.102;Initial Catalog=TestDB;Integrated Security=True";
string sql = @"
UPDATE jobs
SET JobStatus=999,
EndTime=GETDATE()
Where JobStatus<100; INSERT INTO jobs(JobCode,JobStatus,StartTime)
VALUES(N'db555cc9-56fe-42f6-8c31-ce99e9b856c4',0,GETDATE());"; using (SqlConnection sqlCon = new SqlConnection(connectionString))
{
sqlCon.Open(); var sqlCommand = new SqlCommand(sql, sqlCon);
sqlCommand.ExecuteNonQuery();
}
这种用法在System.Data.SqlClient上很常见,我们可以很方便地将若干个SQL语句写在一个字符串里,然后通过System.Data.SqlClient一次性发送到SQL Server进行处理。
但是如果现在我们使用NuGet包System.Data.Odbc,往MySQL中也发送一段包含UPDATE和INSERT语句的SQL批处理脚本:
string connectionString = "Dsn=MySQL_DB";
string sql = @"
UPDATE jobs
SET JobStatus=999,
EndTime=NOW()
Where JobStatus<100; INSERT INTO jobs(JobCode,JobStatus,StartTime)
VALUES(N'db555cc9-56fe-42f6-8c31-ce99e9b856c4',0,NOW());"; using (OdbcConnection oCon = new OdbcConnection(connectionString))
{
oCon.Open(); var oCommand = new OdbcCommand(sql, oCon);
oCommand.ExecuteNonQuery();
}
那么上面的代码会在执行到oCommand.ExecuteNonQuery()时抛出异常:
ERROR [42000] [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.11]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO jobs(JobCode,JobStatus,StartTime)
VALUES(N'db555cc9-56f' at line 6
原因就是因为MySQL的ODBC驱动,不支持将若干个SQL语句写在一个字符串里,然后通过System.Data.Odbc发送到MySQL数据库进行处理。
如果要使用System.Data.Odbc向MySQL数据库发送多条SQL语句,只能像下面这样一条一条地分多次发送,而不能在一个字符串中一次性发送:
string connectionString = "Dsn=MySQL_DB"; using (OdbcConnection oCon = new OdbcConnection(connectionString))
{
oCon.Open(); string sql = @"
UPDATE jobs
SET JobStatus=999,
EndTime=NOW()
Where JobStatus<100;"; var oCommand = new OdbcCommand(sql, oCon);
oCommand.ExecuteNonQuery();//先发送UPDATE语句到MySQL数据库 sql = @"INSERT INTO jobs(JobCode,JobStatus,StartTime)
VALUES(N'db555cc9-56fe-42f6-8c31-ce99e9b856c4',0,NOW());"; oCommand = new OdbcCommand(sql, oCon);
oCommand.ExecuteNonQuery();//再发送INSERT语句到MySQL数据库
}
可以看到我们只能使用System.Data.Odbc,分两次,先发送UPDATE语句,再发送INSERT语句到MySQL数据库,才不会抛出异常报错。
ADO.NET 中可以发送包含多个SQL语句的批处理脚本到SQL Server,但是用MySQL的ODBC驱动不行的更多相关文章
- 同一SQL语句在PLSQL Developer与SQL * PLUS工具中执行结果不一致
背景 今天遇到如下问题,同一sql语句在PLSQL Developer与SQL*PLUS工具中执行结果不一致, sql语句如下 SELECT 'GROUPHEALTH_SEND_EMAIL' as i ...
- 第三周博客之二---Oracle中的sql语句
一.用户及权限(DBA有最高系统权限) 1.数据库的安全性:系统的安全性.数据的安全性 2.权限分类: 2.1系统权限:获得后可访问数据库 常用的有create table,create user,c ...
- 在django中,执行原始sql语句
extra()方法 结果集修改器,一种提供额外查询参数的机制 使用extra: 1:Book.objects.filter(publisher__name='广东人员出版社').extra(where ...
- SQL Server中一些有用的日期sql语句
SQL Server中一些有用的日期sql语句 1.一个月第一天的 SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) 2.本周的星期一 SELECT DA ...
- C# ADO.NET (sql语句连接方式)(查询)
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- C# ADO.NET (sql语句连接方式)(增,删,改)
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- 解析sql语句中left_join、inner_join中的on与where的区别
以下是对在sql语句中left_join.inner_join中的on与where的区别进行了详细的分析介绍,需要的朋友可以参考下 table a(id, type):id type ---- ...
- sql语句中left join、inner join中的on与where的区别
table a(id, type): id type ---------------------------------- 1 1 2 1 3 2 table b ...
- SQL*PLUS中批量执行SQL语句
SQL*PLUS中批量执行SQL语句 今天由于工作的需要,要在CMD中批量执行大量的SQL语句,对于Oracle学习还处在入门阶段的我,只能硬着头皮到处去寻找资料(主要是网络资料,也包括自己的电子书) ...
随机推荐
- iTools(pro)下载
http://bbs.feng.com/forum.php?mod=viewthread&tid=10225990&page=1&extra=#pid157941878 htt ...
- tornado 初解
对于使用习惯Django的我来说,tornado实在是很简陋,没有那么多复杂的文件分类. 在tornado中,一个简单web只需要十几行简单的代码就OK了 import tornado.web imp ...
- 微信小程序 刷新当前页面
刷新当前页面 Measure 法一: 需要的地方 this.onLoad(),试过之后,无用!!! 法二:亲测有效 在this.onReady()中进行获取数据操作(这样一来,就既可以在初次显示时直接 ...
- (后端)项目中的错误之java中判断字符里面含有某些字符
数据库的数据出现了数据错误.找到原因是因为代码里面Spring的判断所导致的.其实就是判断字符里有01,走这里,有02,走那里,全是if,但是是类似indexOf的那种判断,偏偏有一个数据是0102, ...
- vue自动完成搜索功能的数据请求处理
在现在的互联网世界里,自动完成的搜索功能是一个很常见的功能.比如百度.搜狗.360搜索 ... 功能描述一下大概是这个样子的:有一个搜索框,用户在里面输入要查询的条件,系统会“智能”判断用户输完了,然 ...
- [20181108]with temp as 建立临时表吗.txt
[20181108]with temp as 建立临时表吗.txt --//链接:http://www.itpub.net/thread-2106304-1-1.html--//作者提到在dg上使用w ...
- django重定向
return HttpResponseRedirect('/index/')# 重定向返回url格式:http://127.0.0.1:8000/index/会去掉前期的所有路由重新写入/index/ ...
- Json.net日期格式化设置
Json.net默认的时间格式化后带T,不符合一般的业务要求,重新设置JSON.NET的默认日期格式化方式,代码如下: /// <summary> /// Json.net默认转换设置 / ...
- python3 之视频抽针
import cv2 import os Path = "C:/Users/zl3269/Desktop/test/video/" # 视频的格式 /aisg-server/Dat ...
- Maven将中央仓库修改为阿里云的仓库地址
<mirror> <id>nexus-aliyun</id> <mirrorOf>*</mirrorOf> <name>Nexu ...