我正在用 c# 构建一个程序,它从 MYSQL 的 sql 文件中执行代码。该 sql 文件创建一个存储过程,如:
DELIMITER **
USE MyDB**
DROP PROCEDURE IF EXISTS sp_msstudy_Update**
Create Procedure XXXXXXXXXXXXXXXXX
(
_cad varchar(250)
)
Begin
SET @dSQL = CONCAT('ALTER TABLE ', 'mytable',' ADD createdon DATETIME DEFAULT now() NOT NULL');
PREPARE stmt FROM @dSQL;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
End
**
DELIMITER ;
我有一个读取行的函数。 obiously 在循环中我设置了一些代码,比如
line += readedline + "\n";
最后我执行代码:ExecuteNonQuery
of MysqlCommand
。连接和一切正常但是当我执行 sql 来创建存储过程时给我一个语法错误:
C:\PROYECTOS\DB\MySQL\97 xxxx .sql: 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 'DROP PROCEDURE IF EXISTS sp_msstudy_Update
Create Procedure XXXXXXXXXXXXXXXX' at line 2
我在读取 sql 后调用字符串的 C# 代码是:
MySqlConnection conn = null;
MySqlCommand cmd = null;
var connectionstring = "Server=localhost;Port=3306;Database=test;Uid=root;Pwd=root;";
try
{
using (conn = new MySqlConnection(connectionstring))
{
conn.Open();
using (cmd = new MySqlCommand(mysqlsql, conn))
{
cmd.ExecuteNonQuery();
}
conn.Close();
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
cmd.Dispose();
conn.Close();
conn.Dispose();
}
读取我使用的sql文件:
private string LeerFichero(string sqlfile, bool sp)
{
string res = "";
string line;
try
{
System.IO.StreamReader file = new System.IO.StreamReader(sqlfile);
while ((line = file.ReadLine()) != null)
{
res += line + "\n";
}
file.Close();
}
catch (Exception ex)
{
throw ex;
}
return res;
}
你能帮帮我吗?
我更改了程序,出现新错误。我必须跳过 DROP 错误,但现在给了我:
C:\PROYECTOS\DB\MySQL\99.sysauditoria.SP.sql: Parameter '@dSQL' must be defined.
最佳答案
我找到了我正在寻找的解决方案:
MySqlScript script = new MySqlScript(conn, query);
script.Delimiter = "$$";
script.Execute();
where query 我会将我的 sql 文件设置为字符串。使用此系统创建的存储过程。
关于c# - 如何通过 C# 代码在 MySql 中创建存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22693481/