为什么可以先command.Dispose();还能command.Connection.Close();掉,为什么呢?

解决方案 »

  1.   

    问题1:
    这两个CONNECTIOIN不是同一个CONNECTION。
    第一个CONNECTION是第一次创建的,后来的CONNECTION是又一个新的CONNECTION,虽然他们对应了同一个变量名字。这段代码很危险:1——
    第一个CONNECTION还没有关闭,又为一个同名的变量创建了一个新的CONNECTION,导致第一个CONNECTION孤立,最后浪费资源甚至导致数据库无法连接。2——
    两个CONNECTION使用了相同的CONNECTIONSTRING,干吗要创建两个CONNECTION。
    问题2:CLOSE是关闭CONNECTION,DISPOSE是销毁CONNECTION,CONNECTION实现了智能处理,在销毁的时候如果CONNECTION的状态是打开的,则会先关闭。这段代码有一个错误,就是COMMAND的CONNECTION和CONNECTION是同一个连接对象,当一个CONNECTION已经关闭的时候再关闭会产生异常。
      

  2.   

    不可以先DISPOSE后CLOSE,但可以先CLOSE后DISPOSE或不CLOSE而直接DISPOSE,因为DISPOSE会先关闭打开的连接,其实,即便不会在DISPOSE中关闭也是可以只DISPOSE的,当然这样会导致CONNECTION浪费资源。另外,CLOSE后,可以不DISPOSE,因为.NET的GC会自动回收,只是回收的时候不确定了,所以还是手动DISPOSE的好。