【发布时间】:2014-02-25 16:36:24
【问题描述】:
我正在处理连接到 MySQL 数据库的 ASP 项目。现在我正在尝试使用 INOUT 参数调用过程,这将通知我删除了多少行。不幸的是,我在 cmd.ExecuteNonQuery() 收到错误消息:
附加信息:例程的 OUT 或 INOUT 参数 2 gta_geoptima_data.courier_envoye_delete_row 不是变量或新的 BEFORE 触发器中的伪变量
我的程序:
DROP procedure if exists `courrier_envoye_delete_row`;
DELIMITER $$
CREATE procedure `courrier_envoye_delete_row`(IN param_oid binary(16), INOUT courriers_Count integer, INOUT dossiers_Count integer)
BEGIN
-- DECLARE dossiers_Count, courriers_Count integer;
DELETE FROM courrier_envoye WHERE oid = param_oid limit 1;
set courriers_Count = (SELECT ROW_COUNT());
set dossiers_Count = 1;
select @courriers_Count, @dossiers_Count;
END$$
我的代码:
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@param_oid", row_oid);
cmd.Parameters.AddWithValue("@courriers_Count", MySqlDbType.Int32);
cmd.Parameters.AddWithValue("@dossiers_Count", MySqlDbType.Int32);
cmd.ExecuteNonQuery();
singleItem.courriers_Count = (Int32) cmd.Parameters["@courriers_Count"].Value;
singleItem.dossiers_Count = (Int32) cmd.Parameters["@dossiers_Count"].Value;
【问题讨论】:
-
1.为什么要使用这个程序?一个简单的
DELETE语句向客户端报告受影响的行数。 2. 为什么在存储过程中select语句?只需设置INOUT参数的值就足够了。 3. 为什么要混合本地变量和用户变量? -
4.没有
ORDER BY,LIMIT是不确定的。 5. 您不需要子查询:SET courriers_Count = ROW_COUNT()就足够了。 6. 您的INOUT参数似乎是OUT参数。