Npgsql.PostgresException: '42P01: 关系 "table" 不存在'
Npgsql.PostgresException: '42P01: relation "table" does not exist'
我正在尝试自动生成 INSERT 语句以使用 c# 和 Npgsql 从给定的名称和产品列表中填充 table。一切正常,所以我决定添加几个触发器,以实现该项目的目的。触发器相对简单,但在 sql 控制台上对其进行测试时表现完美。然后,当我终于认为我完成了作业时,我用 C# 中的自动填充方法再次测试了它。我得到了这个错误:
Npgsql.PostgresException: '42P01: relation "buyer" does not exist'
我决定在控制台上再次测试它,使用完全相同的 INSERT 语句,再次,它从一开始就可以正常工作。经过 3-4 小时的谷歌搜索并几乎找不到答案后,我禁用了所有触发器,然后 c# 脚本可以正常工作。
因此,总而言之,查询在控制台中输入时可以完美地使用触发器,但在 C# 中使用时找不到 table?。
CREATE OR REPLACE FUNCTION "TBP_ERA".trigger_dohvati_prvi_datum()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
BEGIN
insert into "TBP_ERA".order(orderer,productname,productquantity)
select buyer.id,buyer.productname,buyer.productquantity from buyer where buyer.ordercompleted=0 order by orderedat asc fetch first 1 rows only;
return null;
END;
$function$
;
触发器本身:
create
trigger dohvati_datum after insert
on
"TBP_ERA".buyer for each row execute procedure trigger_dohvati_prvi_datum();
编辑:
C# 部分 INSERT 代码
connection.Open();
NpgsqlCommand command = new NpgsqlCommand("INSERT INTO \"TBP_ERA\".buyer(ID,name,productname,productquantity,ordercompleted)" +
" VALUES(default,'" + buyer.Name + "','" + buyer.ProductName + "'," + buyer.ProductQuantity+",0);", connection);
try
{
command.ExecuteNonQuery();
}
catch (NpgsqlException ex)
{
string nekej = ex.ToString();
throw;
}
connection.Close();
尝试在触发器函数中限定架构 buyer
。
CREATE OR REPLACE FUNCTION "TBP_ERA".trigger_dohvati_prvi_datum()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
BEGIN
insert into "TBP_ERA".order(orderer,productname,productquantity)
select buyer.id,buyer.productname,buyer.productquantity from "TBP_ERA".buyer where buyer.ordercompleted=0 order by orderedat asc fetch first 1 rows only;
return null;
END;
$function$
;
我正在尝试自动生成 INSERT 语句以使用 c# 和 Npgsql 从给定的名称和产品列表中填充 table。一切正常,所以我决定添加几个触发器,以实现该项目的目的。触发器相对简单,但在 sql 控制台上对其进行测试时表现完美。然后,当我终于认为我完成了作业时,我用 C# 中的自动填充方法再次测试了它。我得到了这个错误:
Npgsql.PostgresException: '42P01: relation "buyer" does not exist'
我决定在控制台上再次测试它,使用完全相同的 INSERT 语句,再次,它从一开始就可以正常工作。经过 3-4 小时的谷歌搜索并几乎找不到答案后,我禁用了所有触发器,然后 c# 脚本可以正常工作。
因此,总而言之,查询在控制台中输入时可以完美地使用触发器,但在 C# 中使用时找不到 table?。
CREATE OR REPLACE FUNCTION "TBP_ERA".trigger_dohvati_prvi_datum()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
BEGIN
insert into "TBP_ERA".order(orderer,productname,productquantity)
select buyer.id,buyer.productname,buyer.productquantity from buyer where buyer.ordercompleted=0 order by orderedat asc fetch first 1 rows only;
return null;
END;
$function$
;
触发器本身:
create
trigger dohvati_datum after insert
on
"TBP_ERA".buyer for each row execute procedure trigger_dohvati_prvi_datum();
编辑: C# 部分 INSERT 代码
connection.Open();
NpgsqlCommand command = new NpgsqlCommand("INSERT INTO \"TBP_ERA\".buyer(ID,name,productname,productquantity,ordercompleted)" +
" VALUES(default,'" + buyer.Name + "','" + buyer.ProductName + "'," + buyer.ProductQuantity+",0);", connection);
try
{
command.ExecuteNonQuery();
}
catch (NpgsqlException ex)
{
string nekej = ex.ToString();
throw;
}
connection.Close();
尝试在触发器函数中限定架构 buyer
。
CREATE OR REPLACE FUNCTION "TBP_ERA".trigger_dohvati_prvi_datum()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
BEGIN
insert into "TBP_ERA".order(orderer,productname,productquantity)
select buyer.id,buyer.productname,buyer.productquantity from "TBP_ERA".buyer where buyer.ordercompleted=0 order by orderedat asc fetch first 1 rows only;
return null;
END;
$function$
;