Ho il problema che ho una funzione in postgresql che calcola due interi e dovrebbe restituire il risultato al C# (npgsql) conosle e non so dove sia il mio errore, perché il debugger non dice tutto per me che è utile.Come restituire il risultato di una funzione postgresql in C#? Uscita console vuota
quindi prima di tutto il codice di C# e della funzione.
...
cmd.Parameters["x"].Value = 20;
cmd.Parameters["y"].Value = 22;
connection.Open();
if (connection.State == System.Data.ConnectionState.Open) {
//Console.WriteLine(cmd.Parameters["x"].Value);
command.ExecuteNonQuery();
Console.WriteLine(cmd.Parameters["sum"].Value);
}
e ora il codice del DB:
CREATE OR REPLACE FUNCTION t2(
IN x integer,
IN y integer,
OUT sum integer)
RETURNS integer AS
$BODY$BEGIN
sum := x + y;
INSERT INTO t2 (x, y, sum) values (x, y, sum);
END
Così, quando provo a farlo funzionare,
Console.WriteLine(cmd.Parameters["sum"].Value);
saranno vuote e il [ "somma"] valore. NULLO. Che cosa sto facendo di sbagliato? Ho ragione, quando dico che "somma" è una variabile OUT, non ho bisogno di un ritorno?
Per favore aiuto.
RISOLTO, grazie a tutti! @Patrick mi ha dato la risposta giusta: uso ExecuteScalar() al posto di ExecuteNonQuery()
sono effettivamente l'esecuzione del comando? Non riesco a vederlo nel tuo codice ... – mlinth
con comando intendi la funzione? sì, ma penso che non sia questo il problema? 'DbCommand command = connection.CreateCommand(); command.CommandText = "t2"; command.CommandType = CommandType.StoredProcedure; ' –
modificato il codice completo ora;) –