in pgadmin all works fine! this is only test so I will post datatabse here:
database:
CREATE TABLE "PRACOWNICY"
(
id_pracownika integer NOT NULL DEFAULT nextval('pracownicy_id_pracownika_seq'::regclass),
nazwa character varying(15),
id_szefa integer,
CONSTRAINT pracownicy_pkey PRIMARY KEY (id_pracownika)
)
WITH (
OIDS=FALSE
);
ALTER TABLE "PRACOWNICY" OWNER TO postgres;
data:
INSERT INTO "PRACOWNICY" (id_pracownika, nazwa, id_szefa) VALUES (3, 'TOMEK', 2);
INSERT INTO "PRACOWNICY" (id_pracownika, nazwa, id_szefa) VALUES (1, 'MATEUSZ', NULL);
INSERT INTO "PRACOWNICY" (id_pracownika, nazwa, id_szefa) VALUES (2, 'WOJTEK', 1);
INSERT INTO "PRACOWNICY" (id_pracownika, nazwa, id_szefa) VALUES (4, 'DAMIAN', 2);
INSERT INTO "PRACOWNICY" (id_pracownika, nazwa, id_szefa) VALUES (5, 'KAMIL', 4);
INSERT INTO "PRACOWNICY" (id_pracownika, nazwa, id_szefa) VALUES (6, 'ŁUKASZ', 1);
INSERT INTO "PRACOWNICY" (id_pracownika, nazwa, id_szefa) VALUES (7, 'PAWEŁ', 5);
query:
WITH RECURSIVE REC(ID_PRACOWNIKA, NAZWA, ID_SZEFA) AS
(
SELECT "PRACOWNICY".id_pracownika,"PRACOWNICY".nazwa,"PRACOWNICY".id_szefa
FROM "PRACOWNICY" WHERE "PRACOWNICY".id_pracownika = 1
UNION ALL
SELECT P.ID_PRACOWNIKA,P.NAZWA,P.ID_SZEFA
FROM "PRACOWNICY" AS P
INNER JOIN REC AS R ON R.ID_PRACOWNIKA = P.ID_SZEFA
)
SELECT R.NAZWA AS PRACOWNIK, P.NAZWA AS SZEF
FROM REC AS R
INNER JOIN "PRACOWNICY" AS P ON R.ID_SZEFA = P.ID_PRACOWNIKA
result:
+-----------+---------+
| pracownik | szef |
+-----------+---------+
| WOJTEK | MATEUSZ |
| ŁUKASZ | MATEUSZ |
| TOMEK | WOJTEK |
| DAMIAN | WOJTEK |
| KAMIL | DAMIAN |
| PAWEŁ | KAMIL |
+-----------+---------+
6 rows in set
In visual 2008 try this:
private void radButton1_Click(object sender, EventArgs e)
{
pgSqlConnection1.Open();
pgSqlCommand1.Connection = pgSqlConnection1;
pgSqlCommand1.CommandText =
"WITH RECURSIVE REC(ID_PRACOWNIKA, NAZWA, ID_SZEFA) AS " +
"( " +
" SELECT \"PRACOWNICY\".id_pracownika,\"PRACOWNICY\".nazwa,\"PRACOWNICY\".id_szefa" +
" FROM \"PRACOWNICY\" WHERE \"PRACOWNICY\".id_pracownika = 1 " +
" UNION ALL " +
" SELECT P.ID_PRACOWNIKA,P.NAZWA,P.ID_SZEFA " +
" FROM \"PRACOWNICY\" AS P " +
" INNER JOIN REC AS R ON R.ID_PRACOWNIKA = P.ID_SZEFA " +
") " +
" " +
"SELECT R.NAZWA AS PRACOWNIK, P.NAZWA AS SZEF " +
"FROM REC AS R " +
"INNER JOIN \"PRACOWNICY\" AS P ON R.ID_SZEFA = P.ID_PRACOWNIKA ";
DataSet ds = new DataSet();
pgSqlDataAdapter1.SelectCommand = pgSqlCommand1;
pgSqlDataAdapter1.Fill(ds);
radGridView1.DataSource = ds.Tables[0];
}
I get this error message:
An unhandled exception of type 'Devart.Data.PostgreSql.PgSqlException' occurred in Devart.Data.dll
Additional information: External component has thrown an exception.
sory for me poor english
EDIT
when I do this with ODBC all works fine:
private void radButton1_Click(object sender, EventArgs e)
{
OdbcConnection conn = new OdbcConnection("DRIVER={PostgreSQL Unicode};SERVER=localhost;PORT=5432;DATABASE=test;UID=postgres;PWD=banita;");
conn.Open();
OdbcCommand cmd = new OdbcCommand();
cmd.Connection = conn;
cmd.CommandText =
"WITH RECURSIVE REC(ID_PRACOWNIKA, NAZWA, ID_SZEFA) AS " +
"( " +
" SELECT \"PRACOWNICY\".id_pracownika,\"PRACOWNICY\".nazwa,\"PRACOWNICY\".id_szefa" +
" FROM \"PRACOWNICY\" WHERE \"PRACOWNICY\".id_pracownika = 1 " +
" UNION ALL " +
" SELECT P.ID_PRACOWNIKA,P.NAZWA,P.ID_SZEFA " +
" FROM \"PRACOWNICY\" AS P " +
" INNER JOIN REC AS R ON R.ID_PRACOWNIKA = P.ID_SZEFA " +
") " +
" " +
"SELECT R.NAZWA AS PRACOWNIK, P.NAZWA AS SZEF " +
"FROM REC AS R " +
"INNER JOIN \"PRACOWNICY\" AS P ON R.ID_SZEFA = P.ID_PRACOWNIKA ";
OdbcDataAdapter d = new OdbcDataAdapter();
d.SelectCommand = cmd;
DataSet ds = new DataSet();
d.Fill(ds);
radGridView1.DataSource = ds.Tables[0];
}