我正在c#中構建一個程序,該程序從MYSQL的sql文件執行代碼。該SQL文件創建一個存儲過程,如:如何通過C#代碼在MySql中創建存儲過程
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";
最後我執行的代碼:的MysqlCommand
ExecuteNonQuery
。連接和一切工作,但是當我執行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
我的C#代碼來調用字符串讀取後SQL是:
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.
Hi @David。如果您直接在數據庫上運行它,而不是從C#運行,這個SQL是否可以毫無問題地工作? –
我知道,但我的問題是針對c#,請再次閱讀問題。我有一個serveral文件,我正在建立一個自動過程。 – David
我看過這個問題。你是說它可以直接在數據庫上正常工作嗎?如果它不起作用,從C#調用它將不起作用。您還需要顯示C#代碼,而不僅僅是使用哪些命令。 –