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