首页 > 解决方案 > C#使用输入参数调用存储的MYSQL过程

问题描述

我正在使用 1 个输入参数调用存储过程finish_record 。我在这里阅读了有关该主题的所有相关问题,但我没有看到我这边的错误......但它在某个地方:-)

这里程序:

CREATE DEFINER=`root`@`localhost` PROCEDURE `finish_record`(
IN recordId INT
)
BEGIN
UPDATE bnirolovani.record r INNER JOIN(
select Sum(SumError) as Total, count(RollID) as Rolls, sum(Lenght) as Lenght, sum(ExtraMeter) as ExtraMeter from bnirolovani.roll where RecordID=recordId)
i on r.RecordID = recordId SET r.SumError = i.Total, r.SumReels=i.Rolls,r.SumProduced=i.Lenght, r.SumExtraMeter=ExtraMeter;

UPDATE record r
        INNER JOIN
    (SELECT 
        SUM(Lenght) AS Total
    FROM
        bnirolovani.roll
    WHERE
        RecordID = recordId AND Quality = 0) i ON r.RecordID = recordId 
SET 
    r.QualityE = i.Total;
UPDATE record r
        INNER JOIN
    (SELECT 
        SUM(Lenght) AS Total
    FROM
        bnirolovani.roll
    WHERE
        RecordID = recordId AND Quality = 1) i ON r.RecordID = recordId 
SET 
    r.QualityII = i.Total;
UPDATE record r 
SET 
    DateProducedF = NOW()
WHERE
    r.RecordID = recordID;
END

这里是我的 C# 代码

private void FinishRecord(int recordID)
        {
            try
            {
                string con = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
                using (MySqlConnection conection = new MySqlConnection(con))
                {
                    using (MySqlCommand cmd = new MySqlCommand("finish_record", conection))
                    {
                        
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.Parameters.Add("recordId", MySqlDbType.Int32).Value=recordID;
                        conection.Open();
                        cmd.ExecuteNonQuery();
                        conection.Close();
                    }
                }
            }
            catch (Exception ex)
            {

                throw;
            }

有人可以帮我错误在哪里吗?我没看到:-( THX

标签: c#mysqlstored-procedures

解决方案


解决了

我替换 C# 代码:将过程调用添加为简单的 CommandType=Command.Text 而不是 CommandType.Procedure 并且可以工作

 private void FinishRecord(int recordID)
        {
            try
            {
                string con = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
                using (MySqlConnection conection = new MySqlConnection(con))
                {
                    using (MySqlCommand cmd = new MySqlCommand())
                    {
                        cmd.Connection = conection;
                        cmd.CommandType = CommandType.Text;
                        cmd.CommandText = String.Format("CALL finish_record({0})",recordID);
                        conection.Open();
                        cmd.ExecuteNonQuery();
                        conection.Close();
                    }
                }
            }
            catch (Exception ex)
            {

                throw;
            }
            
        }

推荐阅读