2016-03-14 58 views
0

我已經是在這個問題上工作了一段時間,這裏的情況我使用強迫超時連接:PostgreSQL的OLEDB提供程序超時錯誤

在PostgreSQL我已經改變了的Postgres .conf將其超時設置爲10毫秒。

statement_timeout = 10 

這裏是重要的代碼:

var conn = new OleDbConnection(connectionString); 
var da = new OleDbDataAdapter(sql, conn); 
var dt = new DataTable(); 
var result = da.Fill(dt); 

這裏是連接字符串的內容:

"Provider=PGNP.1;Password=****;Persist Security Info=True;User ID=****;Initial Catalog=****;Data Source=localhost;Extended Properties=\"SSL=allow;\"" 

發生超時時,沒有錯誤或異常是是拋出並且dt.Rows.Count顯示作爲結果。

當我改變postgres.conf文件返回到statement_timeout = 0(禁用它)的dt.Rows.Count的結果大於。

告訴用戶他實際上遇到超時錯誤時他沒有「結果」,這太糟糕了。

任何想法?

+0

根據[PGSQL Docs](http://www.postgresql.org/docs/current/static/runtime-config-client.html)*不建議在postgresql.conf中設置statement_timeout,因爲它會影響所有會話。*也檢查此線程設置[此用戶級別的conf](http://stackoverflow.com/questions/24092463/psql-set-default-statement-timeout-as-a-user-in-postgres)。 10ms是不是太小? – Spidey

+0

嗨@Nimesh,我將連接設置爲10ms的原因是因爲我需要強制超時來複制該錯誤,這與生產中不同。但我想知道爲什麼沒有顯示超時錯誤。相反,我獲得了0行的成功結果。 –

回答

0

Postgres OLEDB提供程序返回超時錯誤。它應該導致從填充方法拋出異常。如果沒有,它可能是一個錯誤。

您可以增加Extended Propeties中的超時時間,例如:COMMAND_TIMEOUT = 900;讓它15分鐘。它會影響當前OLEDB會話中的所有查詢。

+0

嗨@Terry,有些客戶端可能會遇到連接超時,這就是爲什麼我不得不在我的開發環境中強制它。但我認爲你是寫作,那可能是一個錯誤。 –