mysql驱动不支持批处理_ADO.NET 中可以发送包含多个SQL语句的批处理脚本到SQL Server,但是用MySQL的ODBC驱动不行...
眾所周知,我們?cè)贏DO.NET中可以使用NuGet包System.Data.SqlClient來(lái)操作SQL Server,并且ADO.NET是支持向SQL Server發(fā)送包含多個(gè)SQL語(yǔ)句的批處理腳本的。
我們新建一個(gè).NET Core控制臺(tái)項(xiàng)目,然后引入下面兩個(gè)NuGet包:
然后下面的代碼演示了,我們使用NuGet包System.Data.SqlClient向SQL Server發(fā)送了一段包含UPDATE和INSERT語(yǔ)句的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上很常見(jiàn),我們可以很方便地將若干個(gè)SQL語(yǔ)句寫在一個(gè)字符串里,然后通過(guò)System.Data.SqlClient一次性發(fā)送到SQL Server進(jìn)行處理。
但是如果現(xiàn)在我們使用NuGet包System.Data.Odbc,往MySQL中也發(fā)送一段包含UPDATE和INSERT語(yǔ)句的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();
}
那么上面的代碼會(huì)在執(zhí)行到oCommand.ExecuteNonQuery()時(shí)拋出異常:
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
原因就是因?yàn)镸ySQL的ODBC驅(qū)動(dòng),不支持將若干個(gè)SQL語(yǔ)句寫在一個(gè)字符串里,然后通過(guò)System.Data.Odbc發(fā)送到MySQL數(shù)據(jù)庫(kù)進(jìn)行處理。
如果要使用System.Data.Odbc向MySQL數(shù)據(jù)庫(kù)發(fā)送多條SQL語(yǔ)句,只能像下面這樣一條一條地分多次發(fā)送,而不能在一個(gè)字符串中一次性發(fā)送:
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();//先發(fā)送UPDATE語(yǔ)句到MySQL數(shù)據(jù)庫(kù)
sql= @"INSERT INTO jobs(JobCode,JobStatus,StartTime)
VALUES(N'db555cc9-56fe-42f6-8c31-ce99e9b856c4',0,NOW());";
oCommand= newOdbcCommand(sql, oCon);
oCommand.ExecuteNonQuery();//再發(fā)送INSERT語(yǔ)句到MySQL數(shù)據(jù)庫(kù)
}
可以看到我們只能使用System.Data.Odbc,分兩次,先發(fā)送UPDATE語(yǔ)句,再發(fā)送INSERT語(yǔ)句到MySQL數(shù)據(jù)庫(kù),才不會(huì)拋出異常報(bào)錯(cuò)。
總結(jié)
以上是生活随笔為你收集整理的mysql驱动不支持批处理_ADO.NET 中可以发送包含多个SQL语句的批处理脚本到SQL Server,但是用MySQL的ODBC驱动不行...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql -ss -e_课内资源 -
- 下一篇: 保镖机器人作文_我的保镖作文500字