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

标签 c# mysql

我正在尝试向我的 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/

相关文章:

c# - 使用 nunit 控制台传递测试用例参数

c# - 如何每 10 秒运行一次函数?

mysql - MySQL查询缓存

php - Laravel 4.2 ORM - 查询与之间各种表的关系

c# - 使用批处理文件从命令行调用 C# exe

c# - 如何在 linq 连接 (lambda) 上添加 where 子句?

mysql - 如何使表中的字段引用 MySQL/MariaDB 中的另一个表?

mysql - 如何在同一个表格单元格上执行 2 个唯一的 LEFT JOIN?

php - 无法在php中使用真实密码登录

c# - 杀毒软件误报c#.net程序为木马