ファイルを循環し、.sql
その内容を実行してデータベースをセットアップする C# コードがあります。
1つの.sql
ファイルは基本的に次のとおりです。
DROP PROCEDURE IF EXISTS myProc;
DELIMITER $$
CREATE PROCEDURE myProc()
BEGIN
-- procedure stuff goes here
END $$
DELIMITER ;
CALL myProc();
これを MySQL Query Browser のスクリプト ウィンドウに入力すると、完全に実行されます... 何度も何度も実行されます。
ただし、文字列を my に入れてIDbCommand
実行すると...
connection.Open(); // An IDbConnection
IDbTransaction transaction = connection.BeginTransaction();
using (IDbCommand cmd = connection.CreateCommand())
{
cmd.Connection = connection;
cmd.Transaction = transaction;
cmd.CommandText = line;
cmd.CommandType = CommandType.Text;
try
{
cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
transaction.Rollback();
return false;
}
}
transaction.Commit();
connection.Close();
...恐ろしい例外1064が発生します...
SQL 構文にエラーがあります。'DELIMITER $$ CREATE PROCEDURE myProc() BEGIN... の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。
問題は、MySQL では問題なく実行できるのに、C# から実行しようとすると失敗するのはなぜですか? そしてもちろん、2 番目の質問は、それをどのように修正するかということです。