【问题标题】:Executing SQL Script in C# That Contains SOURCE Call在 C# 中执行包含 SOURCE 调用的 SQL 脚本
【发布时间】:2019-03-31 10:40:00
【问题描述】:

所以我正在尝试从C# 应用程序执行以下SQL 代码

SOURCE Install/Create_Initial_Index
SOURCE Install/Create_Table_Pk

使用以下C# 代码

public static void installScripts(MySqlConnection conn, String installScriptPath)
{
    MySqlScript script = new MySqlScript(conn, File.ReadAllText(installScriptPath));
    script.Execute();
}

但是它会引发 SOURCE 关键字的语法错误

错误代码:1064。您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 'SOURCE Install/Create_Initial_Index.sql 附近使用的语法# 20170109 不需要 ==>>> 第 1 行的 SOURCE Inst'

当从MySQL 工作台调用.sql 脚本时,SOURCE 关键字似乎不起作用,但从mysql> 命令行调用它时却起作用。但是,我使用的C# 代码似乎等同于从MySQL 工作台调用它。有谁知道我可以如何更改我的 C# 代码,以便将调用等同于 mysql> 命令行调用。我认为这可以解决问题。

编辑 1:我尝试通过从 C# 运行 shell 脚本来执行此操作,但它不起作用,因为连接需要密码

编辑 2:这个问题与有人认定为“重复”的问题完全不同。请完整阅读问题。

【问题讨论】:

  • 不,不是……
  • 您不能在通过 MySqlScript 对象运行的脚本中使用 SOURCE 命令。它只运行 sql 命令,但 source 命令是 mysql 客户端命令。它在发送到 mysql 服务器之前由 mysql 客户端解释。 dev.mysql.com/doc/refman/8.0/en/mysql-commands.html
  • @mewkie 你误解了我的意思。您正在尝试在 c# 中执行“SOURCE somesql.sql”,就好像它是服务器支持的 SQL 语句一样,它不是。 SOURCE 是 mysql 命令行客户端理解为“加载此脚本并执行内容”的命令。因此,您实际尝试/想要做的是“将 的内容加载到 c# 中并执行它”-> 我链接了另一个问题,因为它解决了您实际尝试解决的问题(有- a-sql-script-in-a-file-and-execute-it-in-c#),而不是您的解决方案的问题。 (这个名字是“XY问题”)

标签: c# mysql sql syntax


【解决方案1】:

我认为改变你的 c# 代码以与你需要的 mysql> 命令行客户端相同的方式工作

  • 解析你读入的文件
  • 确定源语句
  • 加载并执行源语句中的每个文件

【讨论】:

  • 即他应该阅读stackoverflow.com/questions/8855224/… 的答案并实现它们,以便c# 应用程序读取(Create_Initial_Index,Create_Table_pk)中带有SQL 的文件(就像mysql 命令行一样),由c# 形成一堆sql(就像命令行一样)并发送到服务器执行:)
猜你喜欢
  • 2014-04-16
  • 2021-06-14
  • 1970-01-01
  • 2017-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多