【问题标题】:I need help executing MySQL script from a file in C# Using MySql.Data, MySql.Data.MySqlClient我需要帮助从 C# 中的文件执行 MySQL 脚本 Using MySql.Data, MySql.Data.MySqlClient
【发布时间】:2023-03-25 18:33:01
【问题描述】:

代码:

private static void UpdateDatabase(string filename)
{
    string DBHost = (string)ISC.Utilities.RegistryUtils.ReadRegistryValue(Constants.REMOTE_ID_KEY, Constants.REMOTE_DB_ADDRESS_VALUE);
    string DBName = (string)ISC.Utilities.RegistryUtils.ReadRegistryValue(Constants.REMOTE_ID_KEY, Constants.REMOTE_DB_NAME_VALUE);
    string DBUID = (string)ISC.Utilities.RegistryUtils.ReadRegistryValue(Constants.REMOTE_ID_KEY, Constants.REMOTE_DB_UID_VALUE);
    string DBPWD = (string)ISC.Utilities.RegistryUtils.ReadRegistryValue(Constants.REMOTE_ID_KEY, Constants.REMOTE_DB_PWD_VALUE);
    string connectionString = string.Format("SERVER={0};DATABASE={1};UID={2};PASSWORD={3}", DBHost, DBName, DBUID, DBPWD);
    MySqlConnection connection = null;

    try
    {
        string script = File.ReadAllText(filename);
        connection = new MySqlConnection(connectionString);
        connection.Open();
        MySqlCommand newcCommand = new MySqlCommand(script, connection);
        newcCommand.ExecuteNonQuery();
    }
    catch (Exception ex)
    {
        string str = string.Format("{0}{1}{2}", ex.Message, Environment.NewLine, ex.StackTrace);
        System.Windows.Forms.MessageBox.Show(str, "Database Error", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
    }
    finally
    {
        if (connection != null)
        {
            connection.Close();
        }
    }
}

脚本:

DROP PROCEDURE IF EXISTS spMyProc;

CREATE PROCEDURE spMyProc()
BEGIN
  /* Do stuff */
END

CALL spMyProc();
DROP PROCEDURE spMyProc;

错误:

ex = {"您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以在 'CALL spMyProc() 附近使用正确的语法;\r\nDROP PROCEDURE spMyProc' 在第 6 行" }

我不明白为什么这么简单的脚本会导致这些错误。你能帮帮我吗?

【问题讨论】:

  • 在我看来,您的回车/换行符 (\r\n) 是导致问题的原因。从您的文本文件中删除它,或者在执行之前对字符串本身执行.Replace("\r\n", string.Empty)
  • 感谢您的回复。我试过了,得到了一个稍微不同的错误。如果我将“\r\n”替换为“”,则没有替换的错误是相同的。
  • 现在你已经发布了你的脚本,它变得更加清晰了。暂时取消Replace 的建议。在END 之后您缺少; :) 应该可以(如果没有,请将Replace 放回原处)让我知道您的进展情况
  • 天啊,就这么简单。谢谢你。那么为什么工作台不抱怨缺少“;” ?
  • 不客气!它总是是这么简单的事情,不用担心。我也将其发布为答案:)

标签: c# mysql stored-procedures


【解决方案1】:

在声明存储过程后,您似乎缺少分号 ;

END 之后添加。您的代码现在应该如下所示:

DROP PROCEDURE IF EXISTS spMyProc;

CREATE PROCEDURE spMyProc()
BEGIN
  /* Do stuff */
END;

CALL spMyProc();
DROP PROCEDURE spMyProc;

希望这会有所帮助! :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多