У меня есть функция, которая возвращает из базы данных столбцы таблицы, представленные типами text[] и jsonb:
CREATE OR REPLACE FUNCTION public.getValues(
medicamentID uuid)
RETURNS TABLE("Compound" text[], "DoseInstruction" jsonb)
LANGUAGE 'plpgsql'
COST 100
VOLATILE PARALLEL UNSAFE
AS $BODY$
BEGIN
RETURN QUERY SELECT "Medicaments"."Compound", "Medicaments"."DoseInstruction"
FROM "Medicaments"
WHERE "ID" = medicamentID;
END
$BODY$;
Я хочу сохранить результат этой функции в списке строк (List) и в словаре (Dictionary через Json.DeserializeObject). Написал такой код:
Npgsql.NpgsqlCommand pgcom1 = new Npgsql.NpgsqlCommand(@"getvalues", pgcon);
pgcom1.CommandType = CommandType.StoredProcedure;
pgcom1.Parameters.AddWithValue("medicamentid", Guid.Parse(MedicamentsID.Text));
Npgsql.NpgsqlDataReader pgreader1 = pgcom1.ExecuteReader();
List<string> compound = new List<string>();
Dictionary<string, string> doseInstruction = new Dictionary<string, string>();
if (pgreader1.Read())
{
compound = (from IDataRecord r in pgreader1
select (string)r["Compound"]
).ToList();
doseInstruction = JsonConvert.DeserializeObject<Dictionary<string, string>>(pgreader1.GetString(1));
}
pgreader1.Close();
pgcon.Close();
И на строчке
doseInstruction = JsonConvert.DeserializeObject<Dictionary<string, string>>(pgreader1.GetString(1));
Компилятор выдаёт ошибку "No rows available".
Как правильно перевести массив и jsonb в типы c# (полученных именно как результат функции базы данных)? Искал в интернете часов 6, даже близко к ответу не приблизился, возможно некорректно ставил вопросы при поиске, но всё же...
Дополнение: Пробовал вызвать функцию в запроснике pgAdmin, результат выдавался корректно:
SELECT getValues('280ca185-3701-432f-86d0-1209db3f4123');
RESULT:
("{Препарат1,Препарат2}","{""Дети"": ""1"", ""Взрослые"": ""2""}")