c# - 如何通过 C# 代码在 MySql 中创建存储过程

标签 c# mysql

我正在用 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/

相关文章:

mysql - 加载生产数据库模式时出现 rake 错误

php - 选择所有帖子的所有评论 php mysql

c# - 使用 LINQ 打印数组

c# - 使用特定数据跟踪数据库插入

c# - 过滤数据库

c# - 字符串是否存在检查 20k 次

mysql - 重新排序/重置自动增量主键

c# - 如何快速替换数组中的字符

mysql - 所有条件都有效,其中一个条件应同时运行 CASE MySQL

mysql - 优化 MySQL - JOIN 与嵌套查询