日期:2014-05-18  浏览次数:20503 次

grideview 绑定问题
我想知道:后台运行时,什么时候打开的数据库,下面这段代码 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();
  }
  }

------解决方案--------------------
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();
}
}
------解决方案--------------------
从这句开始打开的,Fill代码里面应该执行了打开、读取数据过程
------解决方案--------------------
SqlDataAdapter 读取数据时不需要 sqlconnection 的状态为 open() 它在fill(ds)读取数据时会自动打开和关闭
------解决方案--------------------
adapter.Fill(ds, "teacher");这行代码打开的数据库。

在ADO.NET当中,适配器对象如果调用Fill()方法之前与数据库的连接已经关闭,则自动打开它以便检索数据,执行完毕后再自动将其关闭。

通俗一点来说,Fill方法能够自动打开、自动关闭!