У меня есть несколько ответов на мой вопрос.
Проблема: я сохранил процедуру PLSQL, которая возвращает refCursor.
Я должен получить возвращенные данные с помощью datareader.
Но когда я добавил параметры, db вернул
Чтобы просмотреть все возвращаемые данные, я должен написать свой код так:
NpgsqlTransaction tr = (NpgsqlTransaction) Connection.BeginTransaction();
NpgsqlCommand cursCmd = new NpgsqlCommand("someStoredProcedure",
(NpgsqlConnection) Connection);
cursCmd.Transaction = tr;
NpgsqlParameter rf = new NpgsqlParameter("ref",
NpgsqlTypes.NpgsqlDbType.Refcursor);
rf.Direction = ParameterDirection.InputOutput;
cursCmd.Parameters.Add(rf);
NpgsqlParameter param2 = new NpgsqlParameter("param1",
NpgsqlTypes.Int32);
rf.Direction = ParameterDirection.Input;
cursCmd.Parameters.Add(param2);
NpgsqlDataReader r = cmd.ExecuteReader();
while (r.Read())
{
;// r.GetValue(0);
}
r.NextResult();
while(r.Read())
{
;
}
tr.Commit();
вы должны заметить, что вы не пишете свои параметры в sql как func (: param1)
Если в вашей функции есть параметры, присвойте только имя функции свойству CommandText и добавьте параметры в коллекцию NpgsqlCommand.Parameters, как обычно. Npgsql позаботится о правильной привязке ваших параметров.
Но теперь у меня есть другая проблема. Когда я передаю только другой выходной параметр в мой командный текст.
В результате я должен к полям одно из них равно 0 {мой первый выходной параметр} другое
В oracle я могу напрямую преобразовать параметр RefCursor в datareader, но в postgresql я не могу.
Спасибо за внимание