Ошибки 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 для создания строки подключения. Спасибо за вашу помощь!