加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 我正在处理我的ODBCConnection

发布时间:2020-12-15 23:59:15 所属栏目:百科 来源:网络整理
导读:我正在使用这样的辅助方法: private OdbcCommand GetCommand(string sql) { string conString = "blah"; var con = new OdbcConnection(conString); var cmd = new OdbcCommand(sql,con); return cmd; } 然后我像这样使用它: using (var cmd = GetCommand(
我正在使用这样的辅助方法:

private OdbcCommand GetCommand(string sql)
    {
        string conString = "blah";
        var con = new OdbcConnection(conString);
        var cmd = new OdbcCommand(sql,con);
        return cmd;
    }

然后我像这样使用它:

using (var cmd = GetCommand("select * from myTable")
{
    cmd.connection.open();
    using(var reader = cmd.ExecuteReader())
    {
    }
}

这是第二个例子:

public static OdbcDataReader GetReader(string conString,string sql)
    {
        var cmd = GetCommand(conString,sql);
        cmd.Connection.Open();
        return cmd.ExecuteReader();
    }

像这样使用:

using(var reader = GetReader("blah","select * from blah")
    {
    }

在这两种情况下,我处理连接和cmd对象?我认为连接没有被放在第一个,第二个连接和cmd都没有,是吗?

我是否需要做很长的事情来确保正确处理,或者是否有更短的方法?

using (var con ...)
    using (var cmd)
        using (var reader)

解决方法

对于将Reader包装在using块中的两个示例,如果使用接受CommandBehavior的覆盖并将其设置为“CloseConnection”,则将关闭与现有代码的连接

using(var reader = cmd.ExecuteReader(CommandBehavior.CloseConnection)){}

见http://msdn.microsoft.com/en-us/library/s9bz2k02.aspx

Microsoft知道在阅读器被占用时连接必须保持打开状态,因此创建了在关闭Reader时关闭连接的选项.

您是正确的,在第二个示例中该命令没有被处置.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读