C#, AdoNet, PostgreSQL - problem z obiektem SqlCommand

0

Witam.

Mam procedurę w postgresie:
CREATE OR REPLACE FUNCTION my_procedure(numeric, numeric, timestamp without time zone)
Wywołuję ją w programie:
sql = "my_procedure";
cmd.CommandText = sql;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Clear();
cmd.Parameters.Add(new NpgsqlParameter());
cmd.Parameters[0].NpgsqlDbType = NpgsqlTypes.NpgsqlDbType.Numeric;
cmd.Parameters[0].Value = Convert.ToInt32(batch.Parameters["clientNo"]);
cmd.Parameters.Add(new NpgsqlParameter());
cmd.Parameters[1].NpgsqlDbType = NpgsqlTypes.NpgsqlDbType.Numeric;
cmd.Parameters[1].Value = device_no;
cmd.Parameters.Add(new NpgsqlParameter());
cmd.Parameters[2].NpgsqlDbType = NpgsqlTypes.NpgsqlDbType.Timestamp;
cmd.Parameters[2].Value = Convert.ToDateTime(batch.Parameters["dateAssign"]);
cmd.ExecuteNonQuery();
Procedura działa bez problemu. Następnie z zachowaniem transakcji wykonuję kolejną operację:

cmd.CommandType = CommandType.Text;
cmd.Parameters.Clear();
sql = "SELECT * FROM client";
cmd.CommandText = sql;
int i = cmd.ExecuteNonQuery();
I tutaj wyrzuca mi błąd, że niby nie mam zdefiniowanej funkcji client, mimo tego że typ komendy to TEXT:
ERROR: 42883: function client(numeric,numeric,timestamp without time zone) does not exist.
Macie może jakiś pomysł ? Co robię źle?

0

Ja bym na początek zamiast korzystania ze "starego" obiektu Command, utworzył nowy.

cmd = null; // chodzi mi o ideę - nowe zapytanie, nowy obiekt
cmd = new PgsqlCommand(); 
0

Super. Pomogło. Tylko nie wiem dlaczego nie da się tego zrobić tak jak ja chciałem. Dzięki.

0

stary, używany już obiekt mógł mieć wypełnione jakieś kesze-niekesze i inne pola, których „zapomniałeś” wyczyścić do nowego zapytania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1