gpt4 book ai didi

c# - MySQL 存储过程、c# 和 inout 参数

转载 作者:行者123 更新时间:2023-11-29 00:57:50 25 4
gpt4 key购买 nike

我有一个存储过程,主要是查看交叉引用表中是否存在 ID...如果存在,我想取回它。如果没有,我想创建一个新的并将其取回....这是存储过程:

BEGIN

declare data_found int default 1;
declare l_id int default -1;

declare continue handler for 1329
set data_found=0;

Set p_unique_id = -1;

begin

select unique_id, is_default into p_unique_id, p_is_default from jmax.ids where alt_number=p_alt_num;
end;

if p_unique_id>0 then
set p_existed=1;
else
insert into jmax.ids (alt_number,is_default) VALUES (p_alt_num,p_is_default);
set p_existed=0;
select unique_id into p_unique_id from jmax.ids where alt_number=p_alt_num;

end if;

END

我在 dforge 中运行它,它应该找到一个值,它确实设置了我的 outparam。

当我在 C# 中调用它时,出现错误:您有一个无效的列序号...这是 C#:

DBAccess.DBUtils dbObj =   DBAccess.DBUtils.Instance();
MySqlDataReader theReader;
MySqlCommand theCommand = new MySqlCommand("TestInOut", dbObj.GetLocalConnection());

MySqlParameter p_alt_num, p_is_default, p_unique_id, p_existed;
theCommand.CommandType = CommandType.StoredProcedure;

p_alt_num = theCommand.Parameters.Add("p_alt_num", MySqlDbType.VarChar);
p_alt_num.Value = "12044"; //my text value
p_is_default = theCommand.Parameters.Add("p_is_default", MySqlDbType.Int32);
p_unique_id = theCommand.Parameters.Add("p_unique_id", MySqlDbType.Int32);
p_unique_id.Direction = ParameterDirection.InputOutput;
p_existed = theCommand.Parameters.Add("p_existed", MySqlDbType.Int32);
p_existed.Direction = ParameterDirection.InputOutput;

theReader = theCommand.ExecuteReader();
theReader.Close();

Console.WriteLine("unique ID = <" + theReader.GetInt32(1)); //this line blows up

有什么建议吗?

提前致谢

最佳答案

ExecuteReader 期望从您的存储过程中得到一个表结果集,它看起来不像它(您执行 SELECT ... INTO 而不是 选择...来自)。尝试使用 ExecuteNonQuery 并从参数本身读取值。

// retVal contains the number of records affected by the query. It may return
// the number of rows found, not sure for mysql.
int retVal = theCommand.ExecuteNonQuery();
Console.WriteLine("unique ID = <{0}", p_unique_id.Value);

另请注意,关闭阅读器后您将无法访问阅读器中的数据。在您的示例中,您调用 theReader.Close(); 然后尝试在它关闭后阅读它。

关于c# - MySQL 存储过程、c# 和 inout 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5162238/

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