Работа с Postgresql в C#

Язык программирования C#

Не так давно занялся разработкой приложения на C# работающего на базе PostreSQL, появилась информация которой спешу поделиться. В статье я опишу что необходимо для подключения к PostgreSQL из приложения написанного на C#, и как с ним работать на примерах.

Для того чтобы иметь возможность работать с базами данных PostgreSQL в нашем случае будем использовать Npgsql — .Net Data Provider for Postgresql скачиваем, добавляем Npgsql.dll в свой проект и копируем в папку с скомпилированным проектом необходимые библиотеки (чтобы работало): Npgsql.dll и Mono.Security.dll.

Начнём с подключения к базе:


string conn_param = "Строка подключения к базе"; //Например: "Server=127.0.0.1;Port=5432;User Id=postgres;Password=mypass;Database=mybase;"
string sql = "текст запроса к базе данных";
NpgsqlConnection conn = new NpgsqlConnection(MainParams.ConnectionString);
                NpgsqlCommand comm = new NpgsqlCommand(sql, conn);
                conn.Open(); //Открываем соединение.
                result = comm.ExecuteScalar().ToString(); //Выполняем нашу команду.
                conn.Close(); //Закрываем соединение.

Как видно, ничего сложного, всё как всегда.

comm.ExecuteScalar() — возвращает значение.
comm.ExecuteNonQuery() — выполняет запрос на изменение данных.

Пример выборки массива данных:
NpgsqlConnection con = new NpgsqlConnection("строка подключения");
            NpgsqlCommand com = new NpgsqlCommand("select * from my_table order by \"NAME\"", con);
            con.Open();
            NpgsqlDataReader reader;
            reader = com.ExecuteReader();
            while (reader.Read())
            {
                try
                {
                    string result = reader.GetString(1);//Получаем значение из второго столбца! Первый это (0)!
                }
                catch { }
                
            }
            con.Close();


Вот собственно и всё самое главное, на мой взгляд.

Работа с Postgresql в C Шарп

Комментарии:

sanchopa 19 October 2012, 07:12 0 0

написал


NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;User Id=postgres;Password=;Database=Auto;");
            conn.Open();

            conn.Close();

выдает

Необработанное исключение типа «Npgsql.NpgsqlException» произошло в Npgsql.dll

Дополнительные сведения: ?????: 28P01: ???????????? «postgres» ?? ?????? ???????? ??????????? (?? ??????)

Ответить
Roman 19 October 2012, 08:30 0 0

Дополнительные сведения: ?????: 28P01: ???????????? «postgres» ?? ?????? ???????? ??????????? (?? ??????)

— Напиши нормально без вопросиков, там же не вопросики? Там текст ошибки должен быть…

Ответить
sanchopa 19 October 2012, 08:40 0 0

вот именно что вопросики

Ответить
sanchopa 19 October 2012, 08:41 0 0

я думаю проблема в пароле, когда создаешь БД в СУБД он не просит задать пароль

Ответить
Roman 19 October 2012, 09:03 0 0

Вряд ли, пользователь по умолчанию верный вроде, должно работать. Для пущей уверенности можно задать пароль да проверить.
Странно кракозябрами ругается, я бы по кодировкам посмотрел ещё, но по номерку — причина либо в пароле либо в отсутствии связи с сервером.

Ответить
sanchopa 19 October 2012, 09:08 0 0

ru.pokerstrategy.com/forum/thread.php?threadid=442566 с паролем получаются понты? как пароль задать?

Ответить
Roman 19 October 2012, 09:31 0 0

Давно с Postgress-ом не возился и под рукой нету чтобы посмотреть.
Вот тут глянь: http://www.sql.ru/forum/actualthread.aspx?tid=819777 вроде человеку помогли советы, там.

Ответить
Roman 19 October 2012, 09:33 0 0

Точно не помню, но посмотри нет ли в винде пользователя postgres — ему и задай пароль, если есть. (где то я такое видел — может как раз с постгресом).

Ответить
sanchopa 20 October 2012, 08:36 0 0

Проблема была в пароле. Пароль храниться в C:\Users\sanchopa\AppData\Roaming\postgresql

Ответить