SqlConnection conn= new SqlConnection(“.....”);
SqlCommand cmd=new SqlCommand(sql,conn);
try
{
//执行sql语句
cmd.Connection.Open();//conn.Open();
cmd.ExecuteNonQuery();
// cmd.Connection.Close();
// cmd.Dispose();
}
catch(Exception ex)
{
// cmd.Connection.Close();
// cmd.Dispose();
throw new Exception(ex.Message);
}
finally
{
cmd.Connection.Close();
cmd.Dispose();
// if(null!=conn)
// {
// if(ConnectionState.Closed!=conn.State)
// conn.Close();
// conn.Dispose();
// }
int b=3;
}在b处监视有以下几个疑问 监视对象cmd、conn和cmd.Connection 
1.发现conn.Close()或者cmd.Connection.Close(); 任意一个close后它们中的state属性都是Closed.
是不是cmd.Connection存放的是conn引用?
   那么有几个疑问:
   <1>有了conn.Close();还要cmd.Connection.Close();和cmd.Dispose();
   <2>cmd.Dispose();后cmd.Connection 和conn 的state还是true就是说连接没有关闭。那么  cmd.Dispose();有什么用?是否要写?写与不写在哪里可以看出效果差异(轻举例子因为好试验不要直接说结果)
2 执行conn.Dispose(); 发现conn  cmd.Connection  state都是Closed 也就是说cmd.Dispose();关不了连接 那它Dispose()个啥劲啊
3 写程序是否要写xxx.Dispose();
请写得出你结论的方法,好我试验。

解决方案 »

  1.   

    cmd.Connection即conn, 执行cmd.Connection.Close()效果等同于conn.Close()
    不需要Dispose, .NET有垃圾回收机制。
    CSDN论坛浏览器:http://CoolSlob.ys168.com/
      

  2.   

    cmd.Dispose();只是销毁SqlCommand这个对象,并释放内存空间
    跟SqlConnection没啥关系吧
      

  3.   

    参看
    http://blog.csdn.net/knight94/archive/2006/04/15/664530.aspx
      

  4.   

    to CoolSlob(CSDN论坛浏览器:http://CoolSlob.ys168.com/) 
      "cmd.Connection即conn, 执行cmd.Connection.Close()效果等同于conn.Close()
      不需要Dispose, .NET有垃圾回收机制。"
      3Q,but
       1.我说的是Dispose的效果,connection的试验调试一下就知道,第一帖告诉监视过conn,cmd相互之间的影响性。
       2.不讨论垃圾回收,讨论Dispose是因为我在webcast上发现微软专家讲座程序中习惯打上Dispose,这就说明有一定的含义。to Lcindep110(Going Home) 
       "cmd.Dispose();只是销毁SqlCommand这个对象,并释放内存空间"
       but "cmd.Dispose();后cmd.Connection 和conn 的state还是true就是说连接没有关闭。那么  cmd.Dispose();有什么用?"销毁SqlCommand这个对象还显示cmd.Connection true?我觉得用你的说法应该显示nullto Knight94(愚翁) 
       我需要更细致的描述还不是一大片的,首先说明我不是不会操作数据库,我只是想理解它的细微用途含义。Thank you all the same