[英]How can I create a MySql function in C#?
我正在嘗試在C#中創建mysql函數。 我這樣做的原因是因為我想遍歷多個mysql數據庫並在每個數據庫中創建函數。
問題在於MySqlCommand不喜歡創建函數所需的DELIMITER語法。 下面的腳本在MySql客戶端中可以很好地執行,但是在這種情況下不起作用:
DELIMITER //
DROP FUNCTION IF EXISTS cleandate //
CREATE FUNCTION cleandate(mydate DATE)
RETURNS DATE
READS SQL DATA
BEGIN
RETURN (CASE WHEN mydate <= '1900-01-01' THEN '1900-01-01' WHEN mydate = '0000-00-00' THEN '1900-01-01'
WHEN DATE_FORMAT(mydate, '%Y') = '0000' THEN '1900-01-01'
WHEN DATE_FORMAT(mydate, '%m') = '00' THEN '1900-01-01'
WHEN DATE_FORMAT(mydate, '%d') = '00' THEN '1900-01-01'
ELSE mydate
END);
END//
嘗試實現此功能的C#代碼(假設connstrings是字符串列表):
foreach(var connstring in connstrings)
{
// Create connection to database
MySql.Data.MySqlClient.MySqlConnection dbConn = new MySql.Data.MySqlClient.MySqlConnection(connstring);
MySqlCommand cmd = dbConn.CreateCommand();
cmd.CommandText = @"[same script here]";
try
{
dbConn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception erro)
{
Console.WriteLine(erro.ToString());
}
}
我在運行此命令時收到“ DELIMITER //附近的語法錯誤”。 有什么想法可以實現這一目標嗎?
MySQL連接器提供了一個MySqlScript類,可以在執行多個語句和設置定界符時代替MySqlCommand使用。
適應您的示例:
foreach(var connstring in connstrings)
{
MySqlConnection dbConn = new MySqlConnection(connstring);
try
{
dbConn.Open();
MySqlScript script = new MySqlScript(dbConn);
script.Query = @"[same script here]";
script.Delimiter = @"//";
script.Execute();
}
catch (Exception error)
{
Console.WriteLine(error.ToString());
}
}
https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-mysqlscript.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.