gpt4 book ai didi

c# - 从 asp.net 页面调用存储过程返回在集合中找不到参数

转载 作者:行者123 更新时间:2023-11-30 00:56:38 26 4
gpt4 key购买 nike

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

最佳答案

我不是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;
}

关于c# - 从 asp.net 页面调用存储过程返回在集合中找不到参数 <Column_Name>。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20494297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com