【问题标题】:MySQL receiving inout parameters from stored procedure in c#MySQL从c#中的存储过程接收inout参数
【发布时间】: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 BYLIMIT 是不确定的。 5. 您不需要子查询:SET courriers_Count = ROW_COUNT() 就足够了。 6. 您的INOUT 参数似乎是OUT 参数。

标签: c# mysql


【解决方案1】:

尝试指定parameter direction

.......
cmd.Parameters
    .AddWithValue("@courriers_Count", MySqlDbType.Int32)
    .Direction = ParameterDirection.InputOutput;
cmd.Parameters
    .AddWithValue("@dossiers_Count", MySqlDbType.Int32)
    .Direction = ParameterDirection.InputOutput;
.......

【讨论】:

  • 我想念那个。谢谢!
猜你喜欢
  • 2011-07-06
  • 2012-09-12
  • 2011-07-29
  • 1970-01-01
  • 1970-01-01
  • 2022-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多