Ich versuche, Dapper zu verwenden, um eine PostreSQL-Funktion aufzurufen, die wie folgt deklariert wird:
ERSTELLEN ODER ERSETZEN FUNKTION public.test (param1 integer, param2 Zeichen variierend, param3 Zeichen variierend)
Ich verwende Dapper-Async , um diese Funktion wie folgt aufzurufen:
cnx.QueryAsync ($ @ "SELECT * FROM öffentlich.test (@ Param1, @ Param2, @ Param3);", neu {Param1 = 12, Param2 = mylongstring1, Param3 = mylongstring2});
Dieser Aufruf schlägt mit dem folgenden Fehler fehl:
Npgsql.PostgresException (0 x 80004005): 42883: Funktion public.test (Ganzzahl, Text, Text) ist nicht vorhanden
Wie Sie sehen können, entspricht die DbString Textparametertypen. Wie kann ich Charaktervariable stattdessen anpassen ?
Das Problem ist wahrscheinlich die Tatsache, dass Ihre Funktion mit dem Parameter type character varying
, aber der Fehler zeigt, dass Sie text
senden. Obwohl dies etwas verwirrend sein kann, sind dies zwei verschiedene Backend-Typen.
Standardmäßig ordnet Npgsql die .NET-Zeichenfolge dem text
und nicht dem character varying
. Sie können entweder Ihre Funktion ändern, um text
zu akzeptieren (oder eine Überladung hinzufügen), oder NpgsqlDbType
, um character varying
anzugeben (nicht sicher, wie dies mit Dapper funktioniert).