我想知道:后台运行时,什么时候打开的数据库,下面这段代码  bind()
前台:
    <asp:GridView ID="GridView1" runat="server" CellPadding="4" ForeColor="#333333" 
            GridLines="None">
        </asp:GridView>
后台:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;namespace Grideview
{
    public partial class Griedview : System.Web.UI.Page
    {
        private SqlConnection conn;
        private SqlCommand comm;
        private string connstring = ConfigurationManager.ConnectionStrings[1].ConnectionString;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                bind();
            }
        }
        /// <summary>
        /// 数据绑定
        /// </summary>
        public void bind()
        {
            string sql = "select * from teacher";
            this.conn = new SqlConnection(connstring);
            SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
            DataSet ds = new DataSet();
            adapter.Fill(ds, "teacher");
            this.GridView1.DataSource = ds;
            GridView1.DataKeyNames = new string[] { "t_id" };//主键 
            this.GridView1.DataBind();
            conn.Close();
        }
    }

解决方案 »

  1.   

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using System.Data.SqlClient;
    using System.Configuration;namespace Grideview
    {
      public partial class Griedview : System.Web.UI.Page
      {
      private SqlConnection conn;
      private SqlCommand comm;
      private string connstring = ConfigurationManager.ConnectionStrings[1].ConnectionString;
      protected void Page_Load(object sender, EventArgs e)
      {
      if (!IsPostBack)
      {
      bind();
      }
      }
      /// <summary>
      /// 数据绑定
      /// </summary>
      public void bind()
      {
      string sql = "select * from teacher";
      this.conn = new SqlConnection(connstring);
      SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
      DataSet ds = new DataSet();
      adapter.Fill(ds, "teacher");//适配器自动判断打开的
      this.GridView1.DataSource = ds;
      GridView1.DataKeyNames = new string[] { "t_id" };//主键  
      this.GridView1.DataBind();
      conn.Close();
      }
      }
      

  2.   

    adapter.Fill(ds, "teacher");//适配器自动判断打开的  
    是从这句开始打开的???还是说在这句之前就已经打开了?
      

  3.   

    从这句开始打开的,Fill代码里面应该执行了打开、读取数据过程
      

  4.   

    SqlDataAdapter 读取数据时不需要 sqlconnection 的状态为 open()  它在fill(ds)读取数据时会自动打开和关闭
      

  5.   

    自动打开和关闭??? 那后面的 conn.close()是不是就没必要了?
      

  6.   

    adapter.Fill(ds, "teacher");这行代码打开的数据库。在ADO.NET当中,适配器对象如果调用Fill()方法之前与数据库的连接已经关闭,则自动打开它以便检索数据,执行完毕后再自动将其关闭。通俗一点来说,Fill方法能够自动打开、自动关闭!