[英]42883: function does not exist - Calling Postgres Functions in Entity Framework C# Npgsql
[英]Npgsql.Postgresql Exception 42883 function does not exist when called from C# - is there a working example available?
這似乎是一個非常普遍的問題。 我瀏覽了PostgresException: 42883
上的一些帖子。 其中大部分與 PostgreSQL 數據庫中 function 簽名中的不匹配以及來自 C# 的調用有關。
我真的沒有看到這個問題。 有人可以啟發我嗎?
我的 PostgreSQL function 是:
CREATE OR REPLACE FUNCTION public.getimportkey(
instid integer,
fname character varying,
fhash text)
RETURNS bigint
LANGUAGE 'plpgsql'
COST 100
VOLATILE PARALLEL UNSAFE
AS $BODY$
declare
impId bigint;
begin
select id
into impId
from importlog
where instrumentid = instId and
filename = fname and
filehash = fhash;
return impId;
end;
$BODY$;
生成PostgresException: 42883
異常的 C# 代碼如下。
using (NpgsqlTransaction transaction = connection.BeginTransaction())
{
NpgsqlCommand command = new NpgsqlCommand("getimportkey", connection);
command.CommandType = System.Data.CommandType.StoredProcedure;
command.Parameters.AddWithValue("@instid",NpgsqlTypes.NpgsqlDbType.Integer,instrumentId);
command.Parameters.AddWithValue("@fName",NpgsqlTypes.NpgsqlDbType.Varchar, fileInfo.Name);
command.Parameters.AddWithValue("@fHash", NpgsqlTypes.NpgsqlDbType.Text, fileHash);
int? impId = (int?)command.ExecuteScalar();
if (impId != null) imported = true;
}
我注意到varchar(255)
和character varying
必須被視為等效類型。 我嘗試了以下方法:
getimportkey
function。 我刷新了 function 列表,確認getimportkey
不見了。CREATE
腳本如下: 更改了fname
參數的定義:
fname character varying,
至:
fname varchar(255),
執行修改后的腳本。
刷新了 function 列表。 getimportkey
又回來了,但fname
參數類型顯示為character varying
。
我猜varchar(255)
被認為與character varying
類型相同。
誰能指導我使用 C# 的參數調用 PostgreSQL function 的工作示例?
function 使用小寫參數名稱聲明,但 c# 代碼使用兩個大寫名稱,因此它們不匹配( @fName
和@fHash
)
您也應該在調用代碼中使用小寫名稱,或者放棄名稱以僅依賴位置參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.