2012-07-13 50 views
0

在asp.net中使用数据绑定控件时,是否有一种很好的模式来确保一切都正确处理?当我使用GridView控件时,是否需要显式关闭连接

这是我到目前为止有:

 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 /命令/连接?或者using语句自动处理这个问题?或者,使用数据绑定控件时可能会有更好的模式?

回答

1

您的代码看起来不错。唯一可能的变化是:

  1. 无需到命令连接时使用CreateCommand
  2. 关联添加CommandBehavior.CloseConnection给ExecuteReader(没有真的有必要用using陈述流)

但他们真的是小事。

+0

感谢您的帮助。听起来像我在正确的轨道上,但改进也很好听。 – njr101 2012-07-13 10:26:21

1

使用using声明时,不需要关心处理对象。 using声明调用dispose()方法在finally块中导致对象本身在调用Dispose后立即超出范围

+0

感谢您的回答。那么,我的代码示例是“完美”的吗?那么,至于我的代码是完美的;)或者你会推荐任何改变? – njr101 2012-07-13 10:13:04

+0

我不认为需要在上面的代码中进行更改。 – 2012-07-13 10:17:47

1

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

  1. 如果你想分页和排序启用,那么你需要加载 数据到数据表中,然后再关闭连接并 读者喜欢以下内容:

    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(); 
    
+0

请复习您的答案,特别是避免downvote的第一行。 – Steve 2012-07-13 10:35:54

+0

首先感谢您的更新。其次,“现在好吗?”?如果没有,那么请给我建议改进它。所有建议都欢迎。 – 2012-07-13 11:16:35

相关问题