使用GridView控件时是否需要显式关闭连接

时间:2012-07-13 10:02:59

标签: c# asp.net sql-server database-connection

在asp.net中使用数据绑定控件时,是否有一个很好的模式可以确保所有内容都正确处理?

这是我到目前为止所拥有的:

        using (var conn = New SqlConnection("connectionString"))
        using (var cmd = conn.CreateCommand())
        {
            cmd.Connection = conn;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "myProc";

            conn.Open();
            using (var rdr = cmd.ExecuteReader())
            {
                gridview1.DataSource = rdr;
                gridview1.DataBind();
            }
        }

我是否需要关闭datareader / command / connection?或者using语句是否自动处理?或者使用数据绑定控件时可能有更好的模式?

3 个答案:

答案 0 :(得分:1)

在finally块中使用using语句。using语句调用dispose()方法时,您不需要注意处理对象,这会导致对象本身超出范围只要调用Dispose

答案 1 :(得分:1)

您的代码似乎正确。唯一可能的变化是:

  1. 使用CreateCommand
  2. 时,无需将连接与命令关联
  3. 向ExecuteReader添加CommandBehavior.CloseConnectionusing语句流不是必需的)
  4. 但他们真的很小。

答案 2 :(得分:1)

使用'using'语句调用dispose方法本身,因此您不需要处理它。但是,您可以使用以下之一:

  1. 如果要启用分页和排序,则需要加载     数据首先到DataTable然后关闭你的连接和     读者喜欢以下:

     var rdr=cmd.ExecuteReader();
        DataTable dt = new DataTable();
        dt.Load(rdr);
        rdr.Close();
        gridview1.DataSource = dt;
        gridview1.DataBind();
    
  2. 如果您不想启用分页和排序,则可以绑定数据     到gridview,然后在将它加载到gridview之后将其关闭,如:

         gridview1.DataSource = rdr;
         gridview1.DataBind();
         rdr.Close();