当使用DbLINQ时,使用LINQ to PostgreSQL出现错误。

3
我将使用DbLINQ进行LINQ to SQL(PostgreSQL)的翻译。
我在进行LINQ to PostgreSQL时遇到了问题。我通过dbmetal成功生成了.dbml和.cs文件,并且我认为我已经获取了所有引用,代码可以编译。 引用:
DbLinq
DbLinq.PostgreSql
DbLinq.SqlServer
Npgsql

using DbLinq.PostgreSql;

我遇到了一个异常:

{"在建立到 SQL Server 的连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问服务器。请验证实例名称是否正确,并验证 SQL Server 是否配置为允许远程连接。(提供程序: Named Pipes Provider, error: 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;USER ID=postgres;PASSWORD=xxxxx;SSL=False;SSLMODE=Disable;TIMEOUT=15;SEARCHPATH=;POOLING=True;CONNECTIONLIFETIME=15;MINPOOLSIZE=1;MAXPOOLSIZE=20;SYNCNOTIFICATION=False;COMMANDTIMEOUT=20;ENLIST=False;PRELOADREADER=False;USEEXTENDEDTYPES=False;INTEGRATED SECURITY=False;COMPATIBLE=2.0.12.0;APPLICATIONNAME=

其中抛出异常{"Keyword not supported: 'host'."}

我可以通过SquirrelSQL和jdbc驱动成功连接到Windows7 64位、Postgres 9.2 64位。

编辑: 这很好。

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!

lp

4个回答

2
您展示了一系列非常不同的错误。
第一个错误是因为您没有告诉LINQ使用nPgSQL,所以它试图使用MS SQL Server并且无法连接 - 因为该机器上可能没有任何MS SQL Server。这就是为什么错误显示“在建立与SQL Server的连接时”。
然后您展示了来自NpgsqlConnectionStringBuilder的nPgSQL连接字符串和关键字“host”引起的结果错误。我最好的猜测是,该类生成的连接字符串是为nPgSQL自己的连接处理例程而设计的,而不是为LINQ设计的。您需要一个指定PostgreSQL提供程序的LINQ连接字符串。
接下来,您展示了另一个您说“很好”的连接字符串,其中附加了“DbLinqProvider=PostgreSql;”,但是在此之后的语句中出现了“错误”。您没有显示错误消息,也没有显示您用于设置连接的代码,因此我们无法真正帮助您。这实际上是一个不同于您最初问的问题; 请发布新问题以解决新问题,而不是重写原始问题。
您需要一个PostgreSQL的LINQ提供程序。请参见此问题以及维基百科上的LINQ页面。看看dbLinq带有Entity Framework的PostgreSQL驱动的LINQ to EntitiesdotConnect
在撰写本文时,nPgSQL不包括LINQ提供程序,因此您需要添加第三方提供程序。据我所知,您无法直接使用LINQ和nPgSQL。

如果我表达不清楚,我很抱歉。我正在使用(或想要使用)DBlinq作为提供程序。我已经使用了DBmetal程序来生成.dbml和.cs文件。 我怀疑它正在尝试连接到“SQL服务器”,但我不知道我做错了什么,我只是按照编译器告诉我的添加了所有引用。 - user1941235

0

我认为 PostgreSQL 使用的默认端口与 1433 不同。尝试指定端口 5432。


我试过了,没运气。 我不知道问题是什么。我怎么测试连接字符串? - user1941235
你是怎么尝试的?如果代码生成器运行了,它必须连接到了一定程度。 - Michael Christensen
我尝试修改连接字符串为: server=127.0.0.1:5432;database=xxxxx;user id=postgres;password=xxxxx server=localhost:5432;database=xxxxx;user id=postgres;password=xxxxx server=127.0.0.1;port=5432;database=xxxxx;user id=postgres;password=xxxxx最后一个无法工作(不支持关键字'port')。 - user1941235
虽然PostgreSQL默认使用端口5432,但是这个答案的基本假设完全错误。PostgreSQL不支持MS SQL Server网络协议,因此您不能像连接MS SQL Server一样连接它。如果正在使用PostgreSQL提供程序nPgSQL,则默认为PostgreSQL默认端口5432,而不是MS SQL Server默认端口。因此,真正的问题在于使用了错误的LINQ提供程序。 - Craig Ringer
实际上,问题中包含的信息比最初的更多。 - Michael Christensen
尽管如此,仍然没有足够的信息;我已经投了反对票,因为这更像是一个支离破碎和不完整的故事,而不是一个实际的问题。我没有投反对票,因为很明显你正在试图回答一个混乱的怪物般的问题。 - Craig Ringer

0

提醒一下,DbLinq 项目已经停止更新了。在我的情况下,它不能立即正常工作。你的模式现在可能可以使用,但是以后你可能需要花时间来更新这个项目。


0

我使用 ConnectionStringBuilder 类来创建连接字符串后,它成功运行了。 感谢您的帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接