繁体   English   中英

如何关闭 .NET ODBC 连接?

[英]How to close a .NET ODBC connection?

我正在使用 ODBC 连接到 Sybase 数据库。 问题是即使在范围完成后连接也不会关闭,当我运行sp_who时,我看到数据库中打开了大约 200 个连接。 我尝试启用连接池,但这也无济于事。

    using(var connection = GetOdbcConnection())
    {
        connection.Open();
        using (var cmd = new OdbcCommand(query, connection))
        {
            var reader = cmd.ExecuteReader();
            if (reader.Read())
            {
                long textLen = reader.GetChars(0, 0, null, 0, 0);
            }
            reader.Close();
        }
    }

我使用的连接字符串是value="Driver={Adaptive Server Enterprise};app=xxx;server=xxxx;port=xxxx; db=xxx;uid=xxx;pwd=xxxx;textsize=2097152"

更新:

public static OdbcConnection GetOdbcConnection() {
    string connectionString = ConfigurationManager.AppSettings["ConnectionString"].ToString();
    return new OdbcConnection(connectionString);
}

你试过connection.Close()吗?

 using(var connection = GetOdbcConnection())
    {
        connection.Open();
        using (var cmd = new OdbcCommand(query, connection))
        {
            var reader = cmd.ExecuteReader();
            if (reader.Read())
            {
                long textLen = reader.GetChars(0, 0, null, 0, 0);

            }
            reader.Close();
        }            
        // Close the connection
        connection.Close();
    }

尝试尝试.. 抓住,最后......

在最后明确检查 connection.state 是否未关闭.. 关闭它..

using块结束时,与数据库的连接将自动关闭。 你根本不需要做任何事情。

我不确定,但我认为 GetOdbcConnection 函数是罪魁祸首。 试试这个函数的修改版本。

private static OdbcConnection _Connection;
public static OdbcConnection GetOdbcConnection() { 
    string connectionString = 
        ConfigurationManager.AppSettings["ConnectionString"].ToString(); 
    _Connection = new OdbcConnection(connectionString);
    return _Connection;
}

ado.net 保持连接打开以供重用,这称为连接池。 我认为对于 odbc 连接,池是在 windows 中的 odbc 设置下配置的。 对于 SqlConenction 等其他类型的连接,您可以在连接字符串中配置池功能。

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM