从asp.net页面调用存储过程将返回在集合中找不到的参数<column_name>。</column_name>

时间:2013-12-10 12:15:53

标签: c# mysql asp.net stored-procedures

我正在尝试调用存储过程,该存储过程从表参数化的表中返回单个值。在调用SP时,它返回以下错误

**

> system.argumentexception: Parameter 'tableName' not found in the collection.

**

我的存储过程是:

    DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `selectDynamicTable`(IN tableName VARCHAR(6))
BEGIN

SET @table1 := tableName;
SET @sql_text := concat('SELECT MAX(Sl_No) FROM ',@table1,';');
PREPARE stmt FROM @sql_text;
EXECUTE stmt;
END

和我调用它的c#代码是:

  MySqlCommand cmdSelect = new MySqlCommand("selectDynamicTable", con);
                cmdSelect.CommandType = CommandType.StoredProcedure;
                cmdSelect.Parameters.AddWithValue("@table1", comp_code.ToString().ToLower());
                //cmdSelect.ExecuteNonQuery();
                MySqlDataReader dr1 = cmdSelect.ExecuteReader();
                while (dr1.Read())
                {
                    int query1 = dr1.GetInt32(0);
                    query1 += 1;
                }

1 个答案:

答案 0 :(得分:0)

我不是Mysql的专家,但我觉得它应该是这样的。如果我在某处犯了错误,其他人可能会纠正。

另外请阅读本教程有关变量:http://www.mysqltutorial.org/variables-in-stored-procedures.aspx

最后,如果您使用dr1作为变量名称而不是测试,我建议将名称更改为可重新组合的名称。

DELIMITER |

CREATE DEFINER=`root`@`localhost` PROCEDURE `selectDynamicTable`(IN tableName VARCHAR(6))
(
IN tableName VARCHAR(6)
)
BEGIN

SET @sql_text := concat('SELECT MAX(Sl_No) FROM ', tableName, ';');
PREPARE stmt FROM @sql_text;
EXECUTE stmt;

END |

delimiter ;





MySqlCommand cmdSelect = new MySqlCommand("selectDynamicTable", con);
cmdSelect.CommandType = CommandType.StoredProcedure;
cmdSelect.Parameters.AddWithValue("tableName", comp_code.ToString().ToLower());
cmd.Parameters["tableName"].Direction = ParameterDirection.Input;

//cmdSelect.ExecuteNonQuery();
MySqlDataReader dr1 = cmdSelect.ExecuteReader();
while (dr1.Read())
{
    int query1 = dr1.GetInt32(0);
    query1 += 1;
}