Ошибки LINQ to PostgreSQL при использовании DbLINQ

Я использую LINQ to SQL (PostgreSQL) через DbLINQ.

У меня проблема с выполнением LINQ для PostgreSQL. Я успешно сгенерировал файлы.dbml и.cs с помощью dbmetal и думаю, что получил все ссылки, код компилируется. Refs:

DbLinq
DbLinq.PostgreSql
DbLinq.SqlServer
Npgsql

using DbLinq.PostgreSql;

Я получаю исключение:

{"При установлении соединения с SQL Server произошла ошибка, связанная с сетью или конкретным экземпляром. Сервер не был найден или не был доступен. Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен для разрешения удаленных подключений. (Поставщик: Поставщик именованных каналов, ошибка: 40 - не удалось открыть соединение с SQL Server)"}

внутреннее исключение:

{"Система не может найти указанный путь"}

Строка подключения:

server=127.0.0.1;database=xxxxx;user id=postgres;password=xxxxx;
ili
server=localhost;database=xxxxx;user id=postgres;password=xxxxx;

Если я пытаюсь использовать NpgsqlConnectionStringBuilder, я получаю:

HOST = localhost; PORT = 5432; PROTOCOL = 3; DATABASE = xxxxx; ID пользователя =postgres;PASSWORD=xxxxx;SSL=False;SSLMODE= отключить;TIMEOUT=15;SEARCHPATH=;POOLING=True;CONNECTIONLIFETIME=15;MINPOOLS 1;MAXPOOLSIZE=20;SYNCNOTIFICATION=False;COMMANDTIMEOUT=20;ENLIST=False;PRELOADREADER=False;USEEXTENDEDTYPES=False; ИНТЕГРИРОВАННАЯ БЕЗОПАСНОСТЬ = False; СОВМЕСТИМОСТЬ =2.0.12.0;APPLICATIONNAME=

за исключением {"Keyword not supported: 'host'."}

Я успешно подключаюсь через SquirrelSQL и драйвер jdbc на 64-битной Win7, 64-битная Postgres 9.2

Редактировать: это хорошо

xxxxxDC dc = new xxxxxDC("server=127.0.0.1;database=xxxxx;user id=postgres;password=xxxxx;DbLinqProvider=PostgreSql;");
         var q = from r in dc.xxxxx
                 select r;

но я получаю сообщение об ошибке

dataGridView1.DataSource = q

Теперь я знаю, что это потому, что запрос не выполняется сразу. Но проблема остается. "Сервер не найден или не был доступен"

F1!

Л.П.

4 ответа

Вы показываете ряд совершенно разных ошибок.

Первый - потому что вы не сказали LINQ использовать nPgSQL, поэтому он пытается использовать MS SQL Server и не может подключиться - поскольку на компьютере, вероятно, нет MS SQL Server. Вот почему ошибка говорит while establishing a connection to SQL Server,

Затем вы показываете строку подключения nPgSQL из NpgsqlConnectionStringBuilder и в результате ошибка о host ключевое слово. Как я могу догадаться, это потому, что строка соединения, созданная этим классом, предназначена для собственных процедур обработки соединений nPgSQL, а не для LINQ. Вам нужна строка соединения LINQ, в которой указан поставщик PostgreSQL.

Затем вы показываете другую строку подключения, которую вы говорите "хорошо", которая имеет DbLinqProvider=PostgreSql; добавленный к нему, но скажем, что вы получаете "ошибку" в заявлении после этого. Вы не показываете сообщение об ошибке, а также код, который вы использовали для установки соединения, поэтому мы не можем вам помочь. Это действительно совсем другой вопрос, чем вы изначально задали; пожалуйста, опубликуйте новый вопрос для новой проблемы, а не переписывайте исходный вопрос.

Вам нужен поставщик LINQ для PostgreSQL. Смотрите этот вопрос и страницу википедии на LINQ. Посмотрите на dbLinq, LINQ to Entities с драйвером PostgreSQL для Entity Framework или dotConnect.

На момент написания nPgSQL не включал поставщика LINQ, поэтому вам нужно добавить стороннего поставщика. AFAIK, вы не можете просто использовать LINQ с nPgSQL напрямую.

К вашему сведению, проект DbLinq мертв) В моем случае это не сработало сразу. Ваша схема может работать сейчас, но позже вам, вероятно, придется потратить время на обновление проекта)

Я думаю, что postgresql использует порт по умолчанию, отличный от 1433. Попробуйте указать порт 5432

Это сработало после того, как я использовал класс ConnectionStringBuilder для создания строки подключения. Спасибо за вашу помощь!

Другие вопросы по тегам