2013-01-01 58 views
3

我通過DbLINQ使用LINQ to SQL(PostgreSQL)。使用DbLINQ時LINQ to PostgreSQL錯誤

我在LINQ到PostgreSQL時遇到問題。我用dbmetal成功生成了.dbml和.cs文件,我想我得到了所有的引用,代碼編譯。 參考文獻:

DbLinq 
DbLinq.PostgreSql 
DbLinq.SqlServer 
Npgsql 

using DbLinq.PostgreSql; 

我得到一個異常:

{"A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)"}

內部異常:

{"The system cannot find the path specified"}

連接字符串:

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驅動程序成功地連接上的Win7 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

回答

0

我覺得PostgreSQL使用一個不同的默認端口1433相比嘗試指定端口5432

+0

我試過了,沒有運氣。 我不知道是什麼問題。我怎麼才能測試連接字符串? – user1941235

+0

你是怎麼嘗試的?如果代碼生成器運行它必須已連接到有限程度 –

+0

我試圖修改連接字符串到服務器= 127.0.0.1:5432;數據庫= xxxxx;用戶id = postgres;密碼= xxxxx 服務器=本地主機:5432;數據庫= xxxxx ; user id = postgres; password = xxxxx server = 127.0.0.1; port = 5432; database = xxxxx; user id = postgres; password = xxxxx 最後一個不起作用(不受支持的關鍵字「端口」) – user1941235

2

你呈現出一系列完全不同的錯誤。

第一個是因爲你沒有告訴LINQ使用nPgSQL,所以它試圖使用MS SQL Server,並且它無法連接 - 因爲機器上可能沒有任何MS SQL Server。這就是爲什麼錯誤說while establishing a connection to SQL Server

然後,您將顯示來自NpgsqlConnectionStringBuilder的nPgSQL連接字符串以及由此產生的有關host關鍵字的錯誤。盡我所能猜到,這是因爲該類生成的連接字符串是用於nPgSQL自己的連接處理例程,而不是用於LINQ。你需要一個指定PostgreSQL提供者的LINQ連接字符串。

然後,您將顯示另一個連接字符串,您認爲其後附有DbLinqProvider=PostgreSql;的「罰款」字樣,但假設您在此後的語句中出現「錯誤」。您不會顯示錯誤消息,也不會顯示用於設置連接的代碼,所以我們無法真正幫助您。無論如何,這與你最初的問題完全不同。請針對新問題發佈新問題,而不是重寫原始問題。

您需要一個LINQ提供程序PostgreSQL。見this questionwikipedia page on LINQ。看看dbLinq,LINQ to Entities帶有實體框架的PostgreSQL驅動程序,或者dotConnect

在撰寫本文時,nPgSQL不包含LINQ提供程序,因此您需要添加第三方提供者。 AFAIK你不能直接使用LINQ和nPgSQL。

+0

如果我不清楚,我很抱歉。我正在使用(或想使用)DBlinq作爲提供程序。我已經使用DBmetal程序生成.dbml和.cs文件。 我懷疑它試圖連接到「SQL服務器」,但我不知道我做錯了什麼,我只是添加了編譯器告訴我的所有引用。 – user1941235

0

它在我使用ConnectionStringBuilder類來創建連接字符串之後起作用。 感謝您的幫助!

0

僅供參考,DbLinq項目已經死了)在我的情況下,它不能馬上工作。你的模式現在可能會工作,但後來你可能需要投入時間來更新項目)