更新的存储过程不起作用

时间:2014-12-14 03:45:11

标签: mysql database stored-procedures sql-update

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

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;

一张桌子,不是什么花哨的东西。

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

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

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

1 个答案:

答案 0 :(得分:0)

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

要清理和修复您的代码,您真的应该将您的通话(所有通话和查询)按照这样的方式进行转换:

        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);
                }
            }
        }

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