当前位置: 代码迷 >> 综合 >> net DataReader
  详细解决方案

net DataReader

热度:6   发布时间:2024-01-09 12:24:50.0

ADO.NET有两种对象可以通过连接把数据引入--DataReader 类和DataSet类。 4.1处理和显示数据 不管ASP.NET 页面的大小和复杂性如何,只要是通过ADO.NET来使用数据的页面都具备3段基本的代码: *用于创建到数据源的连接的代码。 *用于从数据源读取、写入数据源以及修改数据的代码 *在用ASP.NET生成的页面上显示数据的代码。 简单说来,可以在下面这种情况下使用DataReader对象: *只相读取数据时、 *从存储器中获取数据只用于显示,而不作其他处理、 在下面情况中使用DataSet对象(与DataSAdater对象一起使用) *可能在数据源中修改(编辑或添加新的)数据时。 *想在读取数据后显示数据前对数据进行修改时。例如,您可能想将数据读入一些表中,或在多个表中的数据间创建关系。您可能想约束列,或者利用多个连接创建多个数据表。 Command 对象保存有一个关于从数据存储器中读取或写入什么内容的定义。它在任务流程中处于中间位置,在连接和显示任务之间。Command对象和 DataReader对象协同工作:Command对象定义读取的内容,而DataReader定义如何使用Connection对象来执行读取任务。关 于读取或写入的最常见定义包括: *读取表中的一些数据的SQL语句 *数据存储器中表的名称 *运行返回数据的存储过程的SQL语句(或存储过程) *将数据写入数据的SQL语句 实 例化Command对象时,ADo.NET要求我们提供两个变量。第一个是保存实际SQL语句(或表名称)的字符串,第二个是Connection对象。 如果我们假定Connection对象的名称为objConnection, 那么我们就可以为SQLSever和OleDb分别编写下面的例子: String strSQL="SELECT MyColumn FROM MyTabel"; SqlCommand objCommand =new SqlCommand(strSQL,objConnecton); String strSQL="SELECT MyColumn FROM MyTable"</P> OleDbcommand objCommand=OleDbCommand(strSQL,objConnection); 如果想使用表单或存储过程的名称,那就必须改变相关的CommandType属性,如下所示: 读一个表</P> String strSQL_Suppliers="MyTable"; OleDbConnection objConnection=new OleDbConnection(strConnection); OleDbCommand objCommand=new OleDbCmmand(strSQL_Suppliers,objConnection); objCommand.CommandType=CommandType.TabledDirect; 说明:当您在使用OLE DB.NET数据提供者时,CommandType只能被设置为ComandType.TableDirect.在使用 SQL Server.NET数据提供者时不能使用这一选 择。</P> 读一个存储过程 String strSQL_Suppliers="MyStoreProc"; OleDbConnection objConnection=new OleDbConnection(strConnection); OleDbCommand objCommand=new OleDbCommand(strSQL_Suppliers,objConnection); objCommand.CommandType=CommandType.StoreProcedure;</P> Command 对象的CommandType属性可以被设置为下面3种不同值中的任何一个。上面用过的CommandType.TableDirect和 CommandType.StroedProcedure,以及默认CommandType.Text.</P> 4.1.2 DataReader对象 DataReader用来定义如何根据连接来读取数据,DataReader有3个特征: *DataReader只能读取数据。它们不能对记录进行数据的编辑、创建和删除。 *DataReader只能在数据间向前移动。一旦您移动到“下一个”记录,就不能再回到前一个记录了,除非再执行一遍所有的SQL查询。</P> *DataReader不能在 IIS的内存中保存数据--数据直接传到显示对象(例如:DataGrid对象) 4.2使用 DataReader对象 objConnection.Open(); dgNameList.DataSource=objCommand.ExecuteReader(); dgNameList.DataBind(); objConnecton.Close(); 下面是两个SQL查询注意读取了第一个DataGrid 后我们关闭了 DataReader String strConnection=".. SqlConnection objConnection=new SqlConnection(strConnection); String strSQLcount;</P> strSQLcount="SELECT COUNT(CategoryID) FROM Categories"; Sqlcommand objCommand=new SqlCommand(strSQLcount,objConnection); objConnection.Open(); SqlDataReader objReader=objCommand.ExecuteReader(); dgcount.DataSource=objReader; dgCount.DataBind(); objReader.Close(); String strSQLdata; strSQLdata="SELECT * FROM Categories"; objCommand.CommandText=strSQLdata; objReader=objCommand.ExecuteReader(); dgData.DataBind(); objConnection.Close(); 执行这两条查询允许我们重用Command 对象和DataReader对象,但是我们必须记住在调用ExecuteReader() 之间调用Reader 的Close()方法--如果没调用的话,会提示错误信息:</P> There is already an open DataReader associated with this connetion. 下列是DataReader的高级用法 using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Data.SqlClient; using System.Configuration;

namespace sp {  /// <summary>  /// Datareader 的摘要说明。  /// </summary>  public class Datareader : System.Web.UI.Page  {   protected System.Web.UI.WebControls.DataGrid dgCount;   protected System.Web.UI.WebControls.DataGrid dgData;     private void Page_Load(object sender, System.EventArgs e)   {           String strConnection=ConfigurationSettings.AppSettings["strConnection"];    SqlConnection objConnection=new SqlConnection(strConnection);    objConnection.Open();    String strSQLcount;    strSQLcount="SELECT COUNT(ProductName) FROM [Product Sales for 1997]";    SqlCommand objCommand=new SqlCommand(strSQLcount,objConnection);    SqlDataReader objReader=objCommand.ExecuteReader();    dgCount.DataSource=objReader;    dgCount.DataBind();             objReader.Close();    String strProcName;    strProcName="SELECT * FROM [Product Sales for 1997]";    objCommand.CommandText=strProcName;    objReader=objCommand.ExecuteReader();    dgData.DataSource=objReader;    dgData.DataBind();    objConnection.Close();       // 在此处放置用户代码以初始化页面   }

  #region Web 窗体设计器生成的代码   override protected void OnInit(EventArgs e)   {    //    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。    //    InitializeComponent();    base.OnInit(e);   }      /// <summary>   /// 设计器支持所需的方法 - 不要使用代码编辑器修改   /// 此方法的内容。   /// </summary>   private void InitializeComponent()   {       this.Load += new System.EventHandler(this.Page_Load);

  }   #endregion  } }

页面显示Northwind在1997年卖出的所有产品列表用到视图Product Sales for 1997</P> 通 常,我们不用显示声明DataReader对象,因为ExecuteReader()方法已经隐式创建了一个DataReader对象。不过缺点在于使用 过后就会立即销毁该对象。在这个例子中,我们在使用DataReader对象两次,这就意味着我们应该显式声明它,这样它就可以维持到第一次使用过后。 </P>
  相关解决方案