Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
StoredProcedure参数数不正确(C#)_C#_Mysql_Stored Procedures - Fatal编程技术网

StoredProcedure参数数不正确(C#)

StoredProcedure参数数不正确(C#),c#,mysql,stored-procedures,C#,Mysql,Stored Procedures,我有一个像这样创建的storedProcess CREATE DEFINER=`mysqladmin`@`%` PROCEDURE `Alerts_GetAlerts`(IN managerID INT) BEGIN SELECT ID, Type, EmpID, ManagerID, HolID FROM Alerts WHERE ManagerID = managerID; END$$ 然后我试着从我的C代码中调用它,就像这样 using (var con = ne

我有一个像这样创建的
storedProcess

CREATE DEFINER=`mysqladmin`@`%` PROCEDURE `Alerts_GetAlerts`(IN managerID INT)
BEGIN
    SELECT ID, Type, EmpID, ManagerID, HolID
    FROM Alerts
    WHERE ManagerID = managerID;
END$$
然后我试着从我的C代码中调用它,就像这样

using (var con = new MySqlConnection(MySQLConStr))
{
    con.Open();
    using (MySqlCommand cmd = new MySqlCommand("Alerts_GetAlerts", con))
    {
        cmd.Parameters.AddWithValue("@managerID", managerID);
        using (var dataReader = cmd.ExecuteReader())
        {
            while (dataReader.Read())
            {
                var alert = new AlertsModel
                {
                    ID = Convert.ToInt32(dataReader[0]),
                    Type = Convert.ToInt32(dataReader[1]),
                    ManagerID = Convert.ToInt32(dataReader[2]),
                    EmployeeID = Convert.ToInt32(dataReader[3]),
                    HolidayID = Convert.ToInt32(dataReader[4]),
                };
                AllAlerts.Add(alert);
            }
        }
    }
    return AllAlerts;
}
但是,我经常会发现,过程sdcdatabase.Alerts\u GetAlerts的参数数量不正确;预期为1,得到0,即使在我看来我正在传递managerID参数

cmd.Parameters.AddWithValue(“@managerID”,managerID)

我哪里出错了?

试试这个代码

using (var con = new MySqlConnection(MySQLConStr))
{
    con.Open();
    using (MySqlCommand cmd = new MySqlCommand("Alerts_GetAlerts(@managerID)", con))
    {
        cmd.Parameters.AddWithValue("@managerID", managerID);
        using (var dataReader = cmd.ExecuteReader())
        {
            while (dataReader.Read())
            {
                var alert = new AlertsModel
                {
                    ID = Convert.ToInt32(dataReader[0]),
                    Type = Convert.ToInt32(dataReader[1]),
                    ManagerID = Convert.ToInt32(dataReader[2]),
                    EmployeeID = Convert.ToInt32(dataReader[3]),
                    HolidayID = Convert.ToInt32(dataReader[4]),
                };
                AllAlerts.Add(alert);
            }
        }
    }
    return AllAlerts;
}

尝试添加
cmd.CommandType=CommandType.StoredProcess它看起来更像是一个整型变量吗?不要使用AddWithValue,而是使用参数集合的特定重载。添加允许您指定参数的确切数据类型的参数。请在SQL server中运行探查器,并检查通过该命令传递的内容。是识别这类错误的方法。我一定是瞎子。这段代码和提供的一个OP有什么区别?这行代码使用(MySqlCommand cmd=newmysqlcommand(“Alerts_GetAlerts(@managerID)”,con))哦,我明白了。。我没想到:参数名必须在存储过程中定义。添加参数名应该可以解决这个问题。