2
這是手冊中給出的一個例子。當我嘗試相同的時候,我得到了很多例外。這是什麼錯誤。Npgsql奇怪的異常
using(NpgsqlConnection conn = new NpgsqlConnection("connstring"))
{
conn.Open();
using(NpgsqlCommand command = new NpgsqlCommand("select command", conn))
{
command.Parameters.Add(new NpgsqlParameter("column1", NpgsqlDbType.Integer);
command.Parameters[0].Value = 4;
using(NpgsqlDataReader dr = command.ExecuteReader())
{
dr.Read();
Console.Write("{0} \t", dr[0]);
}
}
}
例外:
System exception System.IO.IOException: I/O error occurred.
at Npgsql.NpgsqlState.<ProcessBackendResponses_Ver_3>d__a.MoveNext()
at Npgsql.NpgsqlState.IterateThroughAllResponses(IEnumerable`1 ienum)
at Npgsql.NpgsqlState.Query(NpgsqlConnector context, NpgsqlCommand command)
at Npgsql.NpgsqlConnector.Query(NpgsqlCommand queryCommand)
at Npgsql.NpgsqlConnector.ReleaseRegisteredListen()
at Npgsql.NpgsqlConnector.ReleaseResources()
at Npgsql.NpgsqlConnectorPool.UngetPooledConnector(NpgsqlConnection Connection, NpgsqlConnector Connector)
at Npgsql.NpgsqlConnectorPool.ReleasePooledConnectorInternal(NpgsqlConnection Connection, NpgsqlConnector Connector)
at Npgsql.NpgsqlConnectorPool.ReleasePooledConnector(NpgsqlConnection Connection, NpgsqlConnector Connector)
at Npgsql.NpgsqlConnectorPool.ReleaseConnector(NpgsqlConnection Connection, NpgsqlConnector Connector)
at Npgsql.NpgsqlConnection.Close()
at Npgsql.NpgsqlConnection.Dispose(Boolean disposing)
at System.ComponentModel.Component.Dispose()
現在這工作正常。有什麼區別:
using(NpgsqlConnection conn = new NpgsqlConnection("connstring"))
{
conn.Open();
using(NpgsqlCommand command = new NpgsqlCommand("select command", conn))
{
command.Parameters.Add(new NpgsqlParameter("column1", NpgsqlDbType.Integer);
command.Parameters[0].Value = 4;
NpgsqlDataReader dr = command.ExecuteReader();
dr.Read();
Console.Write("{0} \t", dr[0]);
}
}
爲什麼datareader不能與Idisposable一起使用?
您是否在異常之前得到任何結果,並且postgres日誌中是否有錯誤? 'NpgsqlState.IterateThroughAllResponses'解析非結果查詢的響應,並且在連接正在清理時發送內部查詢。我認爲在這裏,或者Npgsql有bug或者你的代碼中存在一個bug(也許你的連接字符串或者查詢中沒有給出你的示例代碼就是錯誤所在),然後Npgsql使用來自內部的消息而不是對問題的一個很好的解釋。 – 2011-12-21 01:44:04
此外,你可以顯示你真正的''connstring''和''select命令'',只需將用戶名,服務器名和密碼改爲XXXX即可。顯然你不想公佈那個,但問題可能在那裏。 – 2011-12-21 01:45:02
這似乎是Npgsql中的一個問題,它無法正確處理錯誤情況。奇怪的部分是爲什麼處理連接時出現IOException。運行程序時是否斷開與服務器的連接? – 2011-12-21 03:11:39