gpt4 book ai didi

c# - 从存储过程中读取输出参数值

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

我的应用程序使用一些存储过程相当快地插入到多个表中。每个表中插入行的 PK 值用于插入到下一个表中:

基本上,我的存储过程看起来像这样:

create procedure `insert_file`(out @fileid bigint, @filedata longblob, @datesaved datetime)
begin
insert into file(filedata, datesaved)
values(@filedata, @datesaved);

set @fileid = last_insert_id();
end $$
delimiter ;

我期望的是输出刚刚插入的行的 ID,以便我可以在我的“连接”表(将此文件连接到另一个对象的表 - 如用户或文章)中使用它).

这是我的阅读代码:

Int64 lastInsertID;

// db.getReader(string cmd, List<MySqlParameter>());
using (MySqlDataReader dr = db.getReader("insert_file", requiredParameters))
{
if (dr.HasRows())
{
dr.Read();

lastInsertID = dr.GetInt64("@fileid");
}
}

虽然这在我看来是有道理的,但我一直收到错误:

Could not find specified column in results: @fileid

谁能帮我理解我在这里做错了什么(以及如何解决)?

最佳答案

  • 首先:在读取器打开之前,您无法读取输出参数。
  • 第二:你不能使用阅读器读取输出参数,因为存储过程使用 Set 语句并将值赋给变量不是你用数据阅读器返回的结果集

也许您可以尝试更改存储过程的最后一行

 select last_insert_id();

但是,您不再需要输出参数。

使用该参数的正确方法是通过 ExecuteNonQuery

using (MySqlConnection cn = new MySqlConnection(GetConnectionString()))
using(MySqlCommand cmd = new MySqlCommand("insert_file", cn))
{
cn.Open();
// Add the required parameters here //
cmd.ExecuteNonQuery();
lastInsertID = Convert.ToInt32(cmd.Parameters["@fileid"].Value);
}

关于c# - 从存储过程中读取输出参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15813878/

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