0

在 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();
            }
        }

我需要关闭数据读取器/命令/连接吗?还是 using 语句会自动处理这个问题?或者在使用数据绑定控件时可能有更好的模式?

4

3 回答 3

1

using使用语句时,您不需要关心对象的处置。using语句调用dispose()finally 块中的方法,这会导致对象本身在调用 Dispose 后立即超出范围

于 2012-07-13T10:11:16.617 回答
1

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

  1. 使用 CreateCommand 时无需将连接关联到命令
  2. 向 ExecuteReader添加一个(对于语句CommandBehavior.CloseConnection流来说没有必要)using

但它们真的是小事。

于 2012-07-13T10:14:03.613 回答
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();
    
于 2012-07-13T10:22:43.923 回答