【问题标题】:Npgsql.PostgresException: '42P01: relation "table" does not exist'Npgsql.PostgresException:'42P01:关系“表”不存在'
【发布时间】:2018-12-30 19:08:46
【问题描述】:

我正在尝试使用 c# 和 Npgsql 自动生成 INSERT 语句以从给定的名称和产品列表中填充表。一切正常,所以我决定添加几个触发器,这些触发器是为了这个项目的目的而需要的。触发器相对简单,但在 sql 控制台上测试它们时表现完美。然后,当我最终认为我完成了作业时,我再次使用 C# 中的自动填充方法对其进行了测试。我得到了这个错误:

Npgsql.PostgresException: '42P01: 关系“买家”不存在'

我决定在控制台上再次测试它,使用完全相同的 INSERT 语句,并且再次,它从一开始就可以正常工作。经过 3-4 小时的谷歌搜索,几乎没有找到答案,我禁用了所有触发器,然后 c# 脚本运行没有任何问题。

所以,总而言之,查询在控制台中键入时可以完美地使用触发器,但是在 C# 中使用时却找不到表?

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();

【问题讨论】:

  • 如果它们在控制台中工作,那么你没有错误,但在你没有显示的 C# 代码中
  • 你,我已经编辑了我的帖子

标签: c# sql postgresql npgsql


【解决方案1】:

尝试在触发函数中对 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$
;

【讨论】:

    猜你喜欢
    • 2014-12-25
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    相关资源
    最近更新 更多