mysql驱动不支持批处理_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 = newSqlConnection(connectionString))

{

sqlCon.Open();var sqlCommand = newSqlCommand(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 = newOdbcConnection(connectionString))

{

oCon.Open();var oCommand = newOdbcCommand(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 = newOdbcConnection(connectionString))

{

oCon.Open();string sql = @"UPDATE jobs

SET JobStatus=999,

EndTime=NOW()

Where JobStatus<100;";var oCommand = newOdbcCommand(sql, oCon);

oCommand.ExecuteNonQuery();//先发送UPDATE语句到MySQL数据库

sql= @"INSERT INTO jobs(JobCode,JobStatus,StartTime)

VALUES(N'db555cc9-56fe-42f6-8c31-ce99e9b856c4',0,NOW());";

oCommand= newOdbcCommand(sql, oCon);

oCommand.ExecuteNonQuery();//再发送INSERT语句到MySQL数据库

}

可以看到我们只能使用System.Data.Odbc,分两次,先发送UPDATE语句,再发送INSERT语句到MySQL数据库,才不会抛出异常报错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值