我在app_code里面建了一个类abc,
并声明属性public static SqlConnection CONN;
之后在CS程序中直接给abc.CONN赋值
abc里面一个方法:
public static void go(string TemplateID)
{
  string sql ="..........";
  SqlCommand cmd = new SqlCommand(sql, CONN);
  //处理
  //CONN.Close(); //????????????
}这时,我要在go方法里面关闭CONN吗?

解决方案 »

  1.   

    SqlConnection是非托管资源,一般要求自己关闭与释放,即应该调用go
      

  2.   

    asp.net夜话之七:ADO.NET介绍
    ADO.NET是对Microsoft ActiveX Data Objects (ADO)一个跨时代的改进,它提供了平台互用性和可伸缩的数据访问。由于传送的数据都是XML格式的,因此任何能够读取XML格式的应用程序都可以进行数据处理。事实上,接受数据的组件不一定要是ADO .NET组件,它可以是基于一个Microsoft Visual Studio的解决方案,也可以是任何运行在其它平台上的任何应用程序。以前做数据库访问的时候,需要一直与数据库保持连接,直到获取完所有满足需要的数据之后才会断开数据库连接,这种数据库访问方式称之为连接式数据访问技术。相比于以前的连接式数据访问技术,ADO.NET除了提供连接式数据访问技术之外,还提供了另一种断开式解决方案,那就是在内存中模拟一个数据库,也就是内存中的数据库。我们知道在实际的数据库技术中,每个数据库就是一个业务逻辑单元,一般来说这个数据库包含了实现一个应用软件或者一个网站所需要的全部数据。
    本篇中还讲述了自定义分页在数据库层的理论。
      

  3.   

    Connection对象
    Connection对象也称为数据库连接对象,Connection对象的功能是负责对数据源的连接。所有Connection对象的基类都是DbConnection类。
    Connection对象有两个重要属性:
    ConnectionString:表示用于打开 SQL Server 数据库的字符串;
    State:表示 Connection 的状态,有Closed和Open两种状态。
    Connection对象有两个重要方法:
    Open()方法:指示打开数据库;
    Close()方法:指示关闭数据库。
    实例化一个Connection对象的时候,被实例化的Connection对象是关闭的,我们需要Open这个Connection对象,执行完毕相关操作之后再关闭这个Connection对象。
    在操作数据库的时候,为了提高性能,都遵循一个原则:数据库连接对象应该尽可能晚打开,尽可能早关闭。在上面的例子中,在Command对象需要执行数据库操作之前才打开数据库连接对象,执行数据库操作之后马上就关闭了数据库连接对象。希望初学者们记住这个原则。
      

  4.   

    using(SqlConnection conn = new SqlConnection()){}
    这样似乎是自动关闭
      

  5.   


    加上try{}catch(){}finally{}是个很好的习惯,免的有异常出现那吓人的页面...
      

  6.   

    没错这样是自动关闭的。另外微软自动生成的代码中还有这样写的 仅供参考。
                global::System.Data.ConnectionState previousConnectionState = this.Adapter.InsertCommand.Connection.State;
                if (((this.Adapter.InsertCommand.Connection.State & global::System.Data.ConnectionState.Open) 
                            != global::System.Data.ConnectionState.Open)) {
                    this.Adapter.InsertCommand.Connection.Open();
                }
                try {
                    int returnValue = this.Adapter.InsertCommand.ExecuteNonQuery();
                    return returnValue;
                }
                finally {
                    if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
                        this.Adapter.InsertCommand.Connection.Close();
                    }
                }
      

  7.   

    最好这样关闭:
    SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]);
            con.Open();
            SqlCommand com = new SqlCommand(str, con);
            try
            {
                com.ExecuteNonQuery();
                return true;
            }
            catch
            {
                return false;
            }
            finally
            {
                con.Close();
            }
      

  8.   

    用using自动关不好
    using是自动释放资源,他会等到一定的时间才会自动关闭我们之前有个方案就是用using结果访问人数过多,马上连接数过多了.
    改为close就好了
    所以最好还是用完就关闭
      

  9.   

    建议用完就关闭。使用using 和try{} catch{} finally{}有他们的特点。
    使用try{} catch{} finally{},如:
    try 
            { 
                com.ExecuteNonQuery(); 
                return true; 
            } 
            catch 
            { 
                return false; 
            } 
            finally 
            { 
                con.Close(); 
            }
    这样可以做到马上关闭,而且出现异常的话可以捕获。
    using 是自动释放资源,可能出现11楼所说要等到一定的时间才释放的问题,而且如果出现异常,好象不会报错。
    不知道我理解对否。。
      

  10.   

    用 using(SqlConnection conn = new SqlConnection()){}