当前位置:  开发笔记 > 编程语言 > 正文

SqlCommand.Dispose是否关闭连接?

如何解决《SqlCommand.Dispose是否关闭连接?》经验,为你挑选了2个好方法。

我可以有效地使用这种方法吗?

using(SqlCommand cmd = new SqlCommand("GetSomething", new SqlConnection(Config.ConnectionString))
{
    cmd.Connection.Open();
    // set up parameters and CommandType to StoredProcedure etc. etc.
    cmd.ExecuteNonQuery();
}

我担心的是:SqlCommand的Dispose方法(在退出using块时调用)是否会关闭底层的SqlConnection对象?



1> Ryan Farley..:

不,处置SqlCommand不会影响连接.更好的方法是将for包装SqlConnection在一个使用块中:

using (SqlConnection conn = new SqlConnection(connstring))
{
    conn.Open();
    using (SqlCommand cmd = new SqlCommand(cmdstring, conn))
    {
        cmd.ExecuteNonQuery();
    }
}

否则,由于正在使用它的Command被处理掉(也许这就是你想要的?),Connection就不会改变.但请记住,连接也应该被处理掉,并且处理命令可能比命令更重要.

编辑:

我刚试过这个:

SqlConnection conn = new SqlConnection(connstring);
conn.Open();

using (SqlCommand cmd = new SqlCommand("select field from table where fieldid = 1", conn))
{
    Console.WriteLine(cmd.ExecuteScalar().ToString());
}

using (SqlCommand cmd = new SqlCommand("select field from table where fieldid = 2", conn))
{
    Console.WriteLine(cmd.ExecuteScalar().ToString());
}

conn.Dispose();  

退出使用块时放置第一个命令.连接仍然是开放的,对第二个命令很有用.

因此,处理命令肯定不会处理它正在使用的连接.


该示例的要点不是显示更简单的语法,而是为了演示两个SqlCommands可以与相同的连接一起使用,然后在不丢弃连接的情况下进行处理.需要打开连接然后再使用两次才能证明这一点(参见原始问题).

2> 小智..:

SqlCommand.Dispose是不够的,因为许多SqlCommand可以(重新)使用相同的SqlConnection.将重点放在SqlConnection上.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有