我正在尝试调用存储过程,该存储过程从表参数化的表中返回单个值。在调用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;
}
答案 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;
}