【问题标题】:C# call stored MYSQL procedure with input parameterC#使用输入参数调用存储的MYSQL过程
【发布时间】:2021-05-25 10:01:52
【问题描述】:

我正在使用 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;
            }

有人可以帮助我哪里出错了吗?我没看到:-( 谢了

【问题讨论】:

  • 那么,“有什么问题”?如果SP只选择输入,结果是..? IE。产生这个“问题”的最小失败案例是什么,遇到的“问题”吗?
  • 过程是否从 SQL Server Management Studio 正确运行? ID 是主键吗?密钥是否已经在数据库中?更新仅适用于数据库中的主键。如果 key 不在数据库中,则需要使用 Insert。
  • Hi 程序在 MySQL 工作台中正确运行。在 VS 中失败并出现异常:“数据为空。不能使用空值调用此方法或属性。” @jdweng​​span>
  • 您在工作台中使用的 ID 值是否与 c# 相同?您使用工作台测试时使用的数据库连接字符串吗?

标签: c# mysql stored-procedures


【解决方案1】:

已解决

我替换 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;
            }
            
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多