繁体   English   中英

C# 使用输入参数调用存储的 MYSQL 过程

[英]C# call stored MYSQL procedure with input parameter

我正在使用 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# 代码:将过程调用添加为简单的 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;
            }
            
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM