我想在C#中創建一個mysql函數。我這樣做的原因是因爲我想遍歷多個mysql數據庫並在每個數據庫中創建函數。如何在C#中創建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附近的語法錯誤」。任何想法我可以如何實現這一目標?
通常,您不必在代碼中創建SQL函數。用手工定義它們並在你的代碼中使用它們 –
我幾年前用一個ODBC連接(在VBA中)嘗試過一點成功;但我不記得細節。你的例子突出的一點是,你試圖在一次調用中執行多個語句;大多數數據庫API不允許在連接上至少設置一些附加選項(如果有的話)。 _(編輯:它是通過ODBC ADODB,並不需要'DELIMITER'覆蓋。)_ – Uueerdo