Я использую Postgres 9.4 и NpgSql 2.2.5 для моего .Net-приложения. Postgres новичок для меня и когда я пытаюсь выполнить функцию postgres в базе данных, она бросает меня ошибкаЧтение записей из базы данных с использованием NpgSql и Postgres 9.4
Вот мой C# код
public List<District> DistrictReadAll()
{
try
{
List<District> districts = new List<District>();
using (var conn = new NpgsqlConnection(this.RealEsateDB))
{
conn.Open();
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "district_read_all";
cmd.CommandType = System.Data.CommandType.StoredProcedure;
NpgsqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
District objDist = new District();
objDist.DistrictId = (int)rdr["districtid"];
objDist.Name = rdr["name"].ToString();
districts.Add(objDist);
}
return districts;
}
}
}
catch (Exception ex)
{
throw;
}
}
функция Postgres
create or replace function district_read_all()
returns refcursor
as
$$
declare
ref1 refcursor ;
begin
open ref1 for
select districtid,name from district order by name asc;
return ref1;
end
$$ language plpgsql;
определение public.district таблица
CREATE TABLE district
(
districtid serial NOT NULL,
name character varying(250) NOT NULL,
activeflag boolean DEFAULT true,
CONSTRAINT pk_district_districtid PRIMARY KEY (districtid)
)
WITH (
OIDS=FALSE
);
ALTER TABLE district
OWNER TO postgres;
И ошибка # C StackTrace
Npgsql.NpgsqlException was caught
HResult=-2147467259
Message=ERROR: 34000: cursor "<unnamed portal 1>" does not exist
Source=Npgsql
ErrorCode=-2147467259
BaseMessage=cursor "<unnamed portal 1>" does not exist
Code=34000
ColumnName=""
ConstraintName=""
DataTypeName=""
Detail=""
ErrorSql=SELECT * FROM district_read_all()
File=src\backend\commands\portalcmds.c
Hint=""
Line=168
Position=""
Routine=PerformPortalFetch
SchemaName=""
Severity=ERROR
TableName=""
Where=""
StackTrace:
at Npgsql.NpgsqlState.<ProcessBackendResponses>d__0.MoveNext()
at Npgsql.ForwardsOnlyDataReader.GetNextResponseObject(Boolean cleanup)
at Npgsql.ForwardsOnlyDataReader.GetNextRowDescription()
at Npgsql.ForwardsOnlyDataReader.NextResultInternal()
at Npgsql.ForwardsOnlyDataReader..ctor(IEnumerable`1 dataEnumeration, CommandBehavior behavior, NpgsqlCommand command, NotificationThreadBlock threadBlock, Boolean preparedStatement, NpgsqlRowDescription rowDescription)
at Npgsql.NpgsqlCommand.GetReader(CommandBehavior cb)
at Npgsql.NpgsqlCommand.ExecuteReader(CommandBehavior cb)
at Npgsql.NpgsqlCommand.ExecuteReader()
at CarRental.DataAccess.DistrictAccess.DistrictReadAll() in c:\DotNetApplications\CarRentalGit\RJ.CarRental\CarRental.DataAccess\DistrictAccess.cs:line 58
InnerException:
Это очень простая вещь, если я использую Sql Server
Может кто-нибудь, дайте мне знать, что я здесь делаю неправильно?