gpt4 book ai didi

c# - 是什么导致了 "Subquery returns more than 1 row"错误?

转载 作者:行者123 更新时间:2023-11-28 23:25:14 25 4
gpt4 key购买 nike

我正在尝试向我的 MYSQL 数据库中的延期交货表中添加一个新的延期交货订单。我遇到的问题是,当我尝试选择 Supplier_ID 以将其添加到延期交货表时,程序给我一个错误,提示“子查询返回超过 1 个值”。

供应商表(不确定如何正确构建它)

| Supplier_ID | SupName |

| 1| EWS |

| 6 | Franklin Bakery |

延期交货表

| BackOr_ID | Supplier_ID | BackOr_Org_Date | Sup_Name |

我目前使用的 MYSQL 查询是:

CREATE DEFINER=`root`@`%` PROCEDURE `sp_BackOrder`(
in supname varchar(50),
in dat date
)
BEGIN
insert into Back_Order
(
Supplier_ID,
BackOr_Org_Date,
Sup_Name
)
values
(
(select Supplier_ID from Supplier Where SupName = supname),
dat,
supname
);

END

使用查询的 C# 代码是:

MySqlCommand cmd = new MySqlCommand("sp_BackOrder", new MySqlConnection(*Connection String*));
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new MySqlParameter("supname", Supp_Name)); //Supp_Name is the Supplier Name (a string variable)
cmd.Parameters.Add(new MySqlParameter("dat", DateTime.Now.ToShortDateString())); //dat is the date the Order is placed
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();

我得到的唯一错误是子查询(我假设是选择查询)返回超过 1 个值。我试着环顾四周,甚至查看了 Stackoverflow,但找不到任何解决问题的方法。任何帮助将不胜感激。

最佳答案

它需要看起来像:

delimiter $$
CREATE DEFINER=`root`@`%` PROCEDURE `sp_BackOrder`
( in p_supname varchar(50),
in p_dat date
)
BEGIN
insert into Back_Order(Supplier_ID, BackOr_Org_Date, Sup_Name)
select Supplier_ID, p_dat, p_supname from Supplier Where SupName = p_supname;
END$$
delimiter ;

CREATE DEFINER=`root`@`%` PROCEDURE `sp_BackOrder`
( in p_supname varchar(50),
in p_dat date
)
BEGIN
insert into Back_Order(Supplier_ID, BackOr_Org_Date, Sup_Name)
select Supplier_ID, p_dat, p_supname from Supplier Where SupName = p_supname;
END

两者的交易相同,具体取决于您的DELIMITER 需求。

关于c# - 是什么导致了 "Subquery returns more than 1 row"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39656148/

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