[英]C# ADO.NET: nulls and DbNull — is there more efficient syntax?
[英]C#, MySQL, ADO.NET, delimiter causing syntax error
我有C#代码循环.sql
文件并执行其中的内容来设置数据库。
一个.sql
文件基本如下:
DROP PROCEDURE IF EXISTS myProc;
DELIMITER $$
CREATE PROCEDURE myProc()
BEGIN
-- procedure stuff goes here
END $$
DELIMITER ;
CALL myProc();
当我将它输入到MySQL查询浏览器的脚本窗口时,它会一遍又一遍地运行,就像人们希望的那样。
但是,如果我将字符串放入我的IDbCommand
并执行它...
connection.Open(); // An IDbConnection
IDbTransaction transaction = connection.BeginTransaction();
using (IDbCommand cmd = connection.CreateCommand())
{
cmd.Connection = connection;
cmd.Transaction = transaction;
cmd.CommandText = line;
cmd.CommandType = CommandType.Text;
try
{
cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
transaction.Rollback();
return false;
}
}
transaction.Commit();
connection.Close();
......我得到了可怕的例外1064 ......
您的SQL语法有错误; 检查与MySQL服务器版本对应的手册,以便在'DELIMITER $$ CREATE PROCEDURE myProc()BEGIN附近使用正确的语法...
所以,问题是......为什么MySQL让我这样做没有问题,但是当我尝试从C#运行它时,它失败了? 当然第二个问题是我应该如何修复它。
对于那些寻找快速片段的人......
var connectionString = @"server=ChangeMe;user=ChangeMe;pwd=ChangeMe;database=ChangeMe;";
var scriptText = File.ReadAllText(@"C:\script.sql");
using (var connection = new MySqlConnection(connectionString))
{
var script = new MySqlScript(connection, scriptText);
connection.Open();
script.Execute();
}
在将SQL发送到服务器之前,脚本中的某些命令将被解释为mysqlk客户端可删除。
请参阅mysql命令
实际上所有的分隔符
要从C#解释脚本,您必须编写知道命令是什么的代码,您不能只是逐行将命令传递给服务器。
例如,你在该文件中有3个命令,因此只想调用ExecuteNonQuery 3次
从paracycle的coment你需要使用MySqlScript类
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.