2016-12-26 51 views
0

我在MySQL數據庫上創建了一個存儲過程,它工作正常,如果我直接從Navicat(SGBD)運行它,但如果我嘗試從C#代碼運行存儲過程的腳本,我得到一個錯誤「參數」@req'必須被定義「。我的代碼波紋管:MySQL參數必須用C#定義

DROP PROCEDURE IF EXISTS SP_GET_EXPERIENCE_RECORD_STATISTICS; 

CREATE PROCEDURE SP_GET_EXPERIENCE_RECORD_STATISTICS(IN startTime VARCHAR(19), IN endTime VARCHAR(19), IN isEquipment INT) 
BEGIN 
DECLARE req VARCHAR(1000); 
SET @req = "SELECT "; 

IF(isEquipment = 1) THEN 
    SET @req = CONCAT(@req, "ClientName,"); 
ELSE 
    SET @req = CONCAT(@req, "ContentName 'ClientName',"); 
END IF; 

SET req = CONCAT(req, " COUNT(1) 'ConsumeCount', 
SUM(Points) 'PointsCount', 
SUM(CASE WHEN Mode = 1 THEN 1 ELSE 0 END) 'CardCount', 
SUM(CASE WHEN Mode = 1 THEN Points ELSE 0 END) 'CardPoints', 
SUM(CASE WHEN Mode = 0 THEN 1 ELSE 0 END) 'WeChatCount', 
SUM(CASE WHEN Mode = 0 THEN Points ELSE 0 END) 'WeChatPoints' 
FROM experiencerecord 
WHERE EndTime BETWEEN '", startTime, "' AND '", endTime, "'"); 

IF (isEquipment = 1) THEN 
    SET @req = CONCAT(@req, " GROUP BY ClientName"); 
ELSE 
    SET req = CONCAT(req, " GROUP BY ContentName"); 
END IF; 

PREPARE stmt FROM @req; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
END; 

-- CALL SP_GET_EXPERIENCE_RECORD_STATISTICS('2010-01-01 00:00:00', '2016-12-31 23:59:59', 0); 
-- CALL SP_GET_EXPERIENCE_RECORD_STATISTICS('2010-01-01 00:00:00', '2016-12-31 23:59:59', 1); 

和我的C#代碼:

MySqlConnection conn = new MySqlConnection(Properties.Settings.Default.DatabaseConnectionString); 

public bool mysql(string sql) 
    { 
     try 
     { 
      MySqlCommand comm = new MySqlCommand(sql, conn); 
      MySqlDataAdapter mda = new MySqlDataAdapter(comm); 
      DataSet ds = new DataSet(); 
      mda.Fill(ds); 
      return true; 
     } 
     catch (Exception ex) 
     { 
      return false; 
      throw ex; 
     } 

    } 

任何想法,它來自將非常感激。

+0

什麼是你的C#代碼中的'sql' – e4c5

回答

0

最後我添加了Allow User Variables = True;到connectionString,現在它工作得很好。

0

似乎是一個錯字錯誤

IF (isEquipment = 1) THEN 
    SET @req = CONCAT(@req, " GROUP BY ClientName"); 
ELSE 
    SET @req = CONCAT(@req, " GROUP BY ContentName"); //You forgot @req here! 
END IF; 

而且我沒有看到你的C#代碼的任何AddWithParameter行應該有作爲@req一個參數。

MySqlDataAdapter mda = new MySqlDataAdapter(comm); 
mda.Parameters.AddWithValue("@req",value_goes_here); 
+0

我修復了你找不到的@req所以它更好,但我仍然有一個錯誤「參數'@req'必須被定義」。這很奇怪,req只是一個變量,而不是一個參數... – Hans

+0

嘗試從'SET'關鍵字後的所有'req'中刪除'@'。 –

相關問題