2017-11-06 27 views
0

は私のデータベースに私のストアドプロシージャを呼び出す問題を抱えているコレクションに見つかりませんパラメータ「日付範囲」

これで私のデータベースの私のストアドプロシージャ

DELIMITER $$ 

USE `sample`$$ 

DROP PROCEDURE IF EXISTS `sp_ReturnAttendanceInfo`$$ 

CREATE DEFINER=`root`@`192.168.%` PROCEDURE `sp_ReturnAttendanceInfo`(IN uname INT(4), IN daterange DATETIME) 
BEGIN 
     SELECT shift_time.in, shift_time.out, MIN(perf_prog.start_time) AS start_time, MAX(perf_prog.end_time) AS end_time, perf_prog.date FROM perf_prog INNER JOIN Shifts ON perf_prog.emp_id = Shifts.emp_id 
INNER JOIN shift_time ON Shifts.id = shift_time.id 

WHERE perf_prog.emp_id = uname AND DATE(`date`) >= daterange 

GROUP BY `date` ORDER BY `date` ; 

END$$ 

DELIMITER ; 

私は、データベースにこのストアドプロシージャを呼び出すときこの

CALL sp_ReturnAttendanceInfo(0921, '2017-04-02') 

のようなクエリ はそれが出力を返す

しかし、私は私のC#

using (MySqlConnection connection = new MySqlConnection(mysqlConnection)) 
{ 
    connection.Open(); 
    if (connection.State == System.Data.ConnectionState.Open) 
    { 
     using (MySqlCommand cmd = new MySqlCommand("sp_ReturnAttendanceInfo", connection)) 
     { 
      cmd.CommandType = System.Data.CommandType.StoredProcedure; 
      cmd.Parameters.AddWithValue("@uname", username); 
      cmd.Parameters.AddWithValue("@date", date.ToString("yyyy-MM-dd")); 
      using (MySqlDataReader dataReader = cmd.ExecuteReader()) 
      { 
       while (dataReader.Read()) 
       { 

       } 
      } 
     } 
    } 
} 

でそれを呼び出したときに、私もparametreイム通過を確認:

921 
2017-04-04 

が、それでも私はそれを解決することはできません。私も質問を作成する前に問題を検索するが、私はそれを解決することはできません。エラーメッセージはまだ同じ

であり、これは誤りです:

Parameter 'daterange' not found in the collection. 
    at MySql.Data.MySqlClient.MySqlParameterCollection.GetParameterFlexible(String parameterName, Boolean throwOnNotFound) 
    at MySql.Data.MySqlClient.StoredProcedure.GetAndFixParameter(String spName, MySqlSchemaRow param, Boolean realAsFloat, MySqlParameter returnParameter) 
    at MySql.Data.MySqlClient.StoredProcedure.CheckParameters(String spName) 
    at MySql.Data.MySqlClient.StoredProcedure.Resolve(Boolean preparing) 
    at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) 
    at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader() 

答えて

2

あなたがストアドプロシージャに渡すパラメータとそれらの値を受け入れるパラメータの両方が変更ので、同じにする必要があり:

cmd.Parameters.AddWithValue("@date", date.ToString("yyyy-MM-dd")); 

cmd.Parameters.AddWithValue("@daterange", date.ToString("yyyy-MM-dd")); 
+0

に私はそれを忘れてしまいました。それを指摘してくれてありがとう –