gpt4 book ai didi

c# - 使用 C# 应用程序运行 MySQL DDL 命令

转载 作者:可可西里 更新时间:2023-11-01 08:07:33 26 4
gpt4 key购买 nike

我正在使用 MySQL 数据库和 C# 开发应用程序。使用 MySQL Server 5.0 和 odbc 连接器。在某些情况下,我需要执行 ddl 命令,例如 ALTER TABLECREATE TABLE 来操作数据库。在这些情况下,我需要在执行命令之前使用 IF EXISTS 命令检查数据库。我在下面编写的命令在 Navicat 或 Workbench 中执行时没有任何问题,但是当通过 ExecuteNoneQury 方法将此命令与应用程序一起发送时不起作用。

怎么了?

use db;
drop procedure if exists sp_update ;
delimiter //

create procedure sp_update()
begin

if not exists( SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'tab' AND COLUMN_NAME = 'col' and table_schema = 'db') then
ALTER TABLE `tab` ADD COLUMN `col` int(11) NULL DEFAULT NULL ;
end if;

end//

delimiter ;
call sp_update();
drop procedure if exists sp_update ;

C#命令:

public override int ExecuteNoneQuery(string commandText)
{
int obTemp = 0;
Conn = new MySqlConnection(Connection.ConnectionString);
try
{
MySqlCommand MySqlCommand = new MySqlCommand(commandText, Conn);
if (Conn.State == ConnectionState.Closed)
{
Conn.Open();
}
obTemp = MySqlCommand.ExecuteNonQuery();
}
finally
{
if (Conn.State == ConnectionState.Open)
{
Conn.Close();
}
}
return obTemp;
}

最佳答案

"delimiter"不是 MySQL 语法。它是 mysql 命令行客户端的一个便利功能,只有它能理解(好吧,一些 GUI 客户端也模仿这种行为,以便能够运行最初认为的脚本对于命令行客户端)。

但是,您不需要在连接器执行的任何代码中使用“定界符”。使用它会导致语法错误,就像你遇到的那样。

关于c# - 使用 C# 应用程序运行 MySQL DDL 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8204634/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com