首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Npgsql奇怪异常

Npgsql奇怪异常
EN

Stack Overflow用户
提问于 2011-12-21 09:22:35
回答 1查看 4.2K关注 0票数 3

这是手册中给出的示例。当我尝试同样的方法时,我得到了无数的异常。这里面的错误是什么。

代码语言:javascript
复制
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]);
        }
    }
}

例外:

代码语言:javascript
复制
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()

现在它可以正常工作了。有什么不同:

代码语言:javascript
复制
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一起使用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-27 03:30:03

如果您将datareader与Idisposable一起使用,则Npgsql不会处理连接中断。如果服务器在与应用程序通信之前终止连接,并且当连接返回到连接池时,它将转到服务器检查连接,此时,datareader没有得到正确的处理。在多线程环境中,这将在不幸的情况下出现。如果服务器正在断开自己与连接的连接,它不应该立即终止,以至于Npgsql无法与其通信。增加服务器断开连接的时间更长。我的例子是突然强制断开服务器连接。

解决方案: Npgsql应该在内部处理尚未出现的异常。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8584055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档