【问题标题】:Stored Procedure for update not working更新的存储过程不起作用
【发布时间】:2014-12-14 03:45:11
【问题描述】:

我是编写存储过程的新手,我在执行这个存储过程时遇到了一些问题。它能够更新名称和地址,但无法更新 employeecount。而且我无法跟踪错误 i做了。

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_update_company_details`(
IN p_id int(11),
IN p_name varchar(45),
IN p_address varchar(45),
IN p_num_employee int(11)   
)
BEGIN
UPDATE company
SET name=p_name,
    address=p_address,
    employeecount=p_num_employee
WHERE id=p_id;
END

这是数据库中的表

CREATE TABLE `company` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(45) NOT NULL,
`address` varchar(45) DEFAULT NULL, 
 `employeecount` int(11) DEFAULT NULL,
`logo` blob,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;

一个标准表,不是什么花哨的东西。

这就是我调用这个存储过程的方式。

MySqlCommand cmd = new MySqlCommand(String.Format("call sp_update_company_details({0},'{1}','{2}',{3})",
                   id,request.Name,request.Address,request.NumberOfEmployees), conn);

idrequest 作为参数传递给进行此调用的函数。

【问题讨论】:

  • 你怎么称呼它?它应该要么全部成功,要么全部失败。
  • @JRLambert 查看更新
  • 您确定request.NumberOfEmployees 具有您认为的价值吗?
  • @outlyer 是的,这是错误,我传递的 JSON 对象中有一些错误。

标签: mysql database stored-procedures sql-update


【解决方案1】:

这几乎肯定是您的调用代码而不是存储过程的问题。如果您尝试从工作台执行它,它应该会成功,没有任何问题。

要清理和修复您的代码,您确实应该将您的调用(所有调用和查询)参数化,如下所示:

        using (var conn = new MySqlConnection("connString"))
        {
            using (var cmd = new MySqlCommand("sp_update_company_details"))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("p_id", id);
                cmd.Parameters.AddWithValue("p_name", request.Name);
                cmd.Parameters.AddWithValue("p_address", request.Address);
                cmd.Parameters.AddWithValue("p_num_employee", request.NumberOfEmployees);

                try
                {
                    conn.Open();
                    cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }

我还会逐步确保您认为通过请求传递的值实际上是您认为的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多