• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
激情 希望 斗志昂扬
Records of growth process 专注微软技术
博客园    首页    新随笔    联系   管理    订阅  订阅

ADO.NET中的五个主要对象

Connection 物件
   Connection 对象主要是开启程序和数据库之间的连结。没有利用连结对象将数据库打开,是无法从数据库中取得数据的。这个物件在ADO.NET 的最底层,我们可以自己产生这个对象,或是由其它的对象自动产生。

Command 物件
   Command 对象主要可以用来对数据库发出一些指令,例如可以对数据库下达查询、新增、修改、删除数据等指令,以及呼叫存在数据库中的预存程序等。这个对象是架构在Connection 对象上,也就是Command 对象是透过连结到数据源


DataAdapter 物件
   DataSetCommand 对象主要是在数据源以及DataSet 之间执行数据传输的工作,它可以透过Command 对象下达命令后,并将取得的数据放入DataSet 对象中。这个对象是架构在Command对象上,并提供了许多配合DataSet 使用的功能。在Beta 2 版中DataSetCommand 物件会更名为DataAdapter。

DataSet 物件
   DataSet 这个对象可以视为一个暂存区(Cache),可以把从数据库中所查询到的数据保留起来,甚至可以将整个数据库显示出来。DataSet 的能力不只是可以储存多个Table 而已,还可以透过DataSetCommand 对象取得一些例如主键等的数据表结构,并可以记录数据表间的关联。DataSet 对象可以说是ADO.NET 中重量级的对象,这个对象架构在DataSetCommand 对象上,本身不具备和数据源沟通的能力;也就是说我们是将DataSetCommand 对象当做DataSet 对象以及数据源间传输数据的桥梁。

DataReader 物件
   当我们只需要循序的读取数据而不需要其它操作时,可以使用DataReader 对象。DataReader对象只是一次一笔向下循序的读取数据源中的数据,而且这些数据是只读的,并不允许作其它的操作。因为DataReader 在读取数据的时候限制了每次只读取一笔,而且只能只读,所以使用起来不但节省资源而且效率很好。使用DataReader 对象除了效率较好之外,因为不用把数据全部传回,故可以降低网络的负载。

 

 

 

 ADO.NET   使用Connection   对象来连接数据库,使用Command   或DataAdapter对象来执行SQL语句,并将执行的结果返回给DataReader   或   DataAdapter   ,然后再使用取得的DataReader   或DataAdapter   对象操作数据结果   
  6.2.1   Connection   对象  
    建立Connection   对象的代码:  
  OLEDB:     OleDbConnection   MyConnection=new   OleDbConnection();  
  SQL:           SqlConnection       MyConnection=new   SqlConnection();  
  ◆他们的ConnectionString属性:获取或设置连接语句。   MyConnection.ConnectionString="server=(local);database=pubs;uid=sa;pwd=''";  
  ◆DataBase   属性:获取当前打开数据库  
  ◆DataSource属性:获取打开数据库的连接实例  
  ◆Open   方法:打开连接        
  ◆Close   方法:关闭连接  
  6.2.2   Command与DataReader   对象  
  Command   对象中包含了提交数据库系统的访问信息。OleDbCommand   与SqlCommand   对象,它们的基本对象和操作方法是相同的,在此介绍OleDbCommand的用法,SqlCommand的用法类推即可.  
  如:   OleDbCommand     myComm   =   new   OleDbCommand(strQuery,myConnection);  
      第一个参数是sql语句或存储过程名,第二个参数是前面的Connection   对象的实例   
  Command   对象的只要的属性和方法有:  
  ◆Connection   属性:设置或获取   Command对象使用的Connection   对象实例  
  ◆CommandText   属性:设置或获取需要执行的sql语句或存储过程名  
  ◆CommandType   属性:设置或获取执行语句的类型。它有3个属性值:StoredProceduce(存储过程)   TableDirect     Text(标准的SQL语句)   默认是Text  
  ◆Parameters   属性:取得参数值集合  
  ◆ExecuteReader   方法:执行CommandText指定的SQL语句或存储过程名,返回值类型为DataReader   
  ◆ExecuteNonQuery   方法:与ExecuteReader   功能相同,只是返回值为执行sql语句或存储过程受影响的记录行数   
  DataReader   的主要属性和方法有:  
  ◆FieldCount   属性:显示当前数据记录的字段总和  
  ◆IsClosed     属性:   判断DataReader   对象是否已经关闭  
  ◆Close   方法:关闭DataReader   对象  
  ◆GetString方法:以String类型返回指定列中的值  
  ◆Getvalue   方法:以自身的类型返回指定列中的值   
  ◆Getvalues   方法:返回当前记录所有字段的集合   
  ◆Read   方法:将“光标”指向DataReader对象的下一记录   
    
  Sql连接实例:  
  <%@   Import   Namespace="System.Data"   %>  
  <%@   Import   Namespace="System.Data.SqlClient"   %>  
  <script   language="C#"   runat="server">  
  void   Page_Load(Object   sender,   EventArgs   e)   {  
  SqlConnection   Conn=new   SqlConnection();    
  Conn.ConnectionString="server=(local);database=pubs;uid=sa;pwd=''";  
  Conn.Open();  
  SqlCommand   Comm=new   SqlCommand("select   *   from   Authors   ",Conn);  
  SqlDataReader   dr=Comm.ExecuteReader();        
  dg.DataSource=dr;  
  dg.DataBind();  
  Conn.Close();  
  }  
  </script>  
  <asp:DataGrid   id="dg"   runat="server"   />  
  Aeccess   数据库连接实例   (OleDbCommand   和   OleDbDataReader   使用实例)  
  <%@   Page   Language="C#"   %>  
  <%@   Import   Namespace="System.Data"%>  
  <%@   Import   Namespace="System.Data.OleDb"%>  
  <script   Language="C#"   Runat="Server">  
  OleDbDataReader   dr;  
  public   void   Page_Load(Object   src,EventArgs   e)  
  {  
    string    
   
  myConnstring="provider=Microsoft.Jet.OLEDB.4.0;   Data    
   
  Source="+Server.MapPath(".")+"..\\DataBase\\db2.mdb;";  
  string   strSel="Select   *   from     BookMark";  
  OleDbConnection   myConn=   new   OleDbConnection  
   
  (myConnstring);  
  OleDbCommand   myComm=new   OleDbCommand(strSel,myConn);    
  myComm.Connection.Open();  
  dr=myComm.ExecuteReader();    
  dg.DataSource=dr;  
  dg.DataBind();  
  myConn.Close();  
  }  
  </script>  
  <html>  
  <body>  
  <form   Runat="Server">  
  <asp:DataGrid   id="dg"   runat="server"   />  
  </form>  
  </body>  
  </html>  
   
  ++++++++++++++++++++++++++++++++++++++++++++++++  
  ++++++++++++++++++++++++++++++++++++++++++++++++  

6.3.3   DataSet   与DataAdapter  
  DataReader   对象只能实现对数据的读取,不能完成其他的操作。ADO.NET提供一款更强大的数据操作对象――DataSet   可以将DataSet看成一个非连接的数据库,因为DataSet的内部存储结构与数据库很类似,拥有数据表(DataTable)数据表关联(DataRelation)。DataSet中可以存储多张表等。DataSet拥有类似于数据库的结构,但它并不等同于数据库。首先他可以存储来自数据库的数据,而且还可以存储其他格式的数据,比如   XML格式文档;  
  1.查询数据  
  讲到DataSet的数据库应用,先要了解ADO.NET中的另一个对象DataAdapter   .  
  它也分为SqlDataAdapter   和OleDbDataAdapter  
  建DataAdapte:  
  OleDbDataAdapter     MyAdapter=new   OleDbDataAdapter();  
  SqlDataAdapter           MyAdapter=new   SqlDataAdapter();  
  取得的DataAdapter   对象时必须赋予一个连接对象:  
  MyAdapter.SelectCommand.Connection   =   MyConn;   或  
  MyAdapter.UpdateCommand.Connection   =Myconn;   或  
  MyAdapter.DeleteCommand.Connection   =   MyConn;   或  
  MyAdapter.InsertCommand.Connection   =Myconn;  
  如果需要执行SQL语句,那么还必须给相应的CommandText   属性赋值。代码为:  
  MyAdapter.*Command.CommandText   =   SQL语句;  
  写这么多行代码似乎有些麻烦,如果你只是查询数据库,则可以在建立   DataAdapter实例时就完成上述工作。  
  OleDbDataAdapter   MyAdapter   =   new   OleDbDataAdapter(strSelect,objConnection);  
  <%@   Page   Language="C#"   Runat="Server"%>  
  <%@   Import   Namespace="System.Data"%>  
  <%@   Import   Namespace="System.Data.OleDb"%>  
  <script   Language="C#"   Runat="Server">  
  public   void   Page_Load(Object   src,EventArgs   e)  
  {  
    string    
   
  MyConnString="Provider=Microsoft.Jet.OLEDB.4.0;Data    
   
  Source="+Server.MapPath(".")+"\\DataBase\\db3.mdb;";  
  string   strSel="select   *   from   Score";  
  //建立一个DataSet   实例  
  DataSet   ds=new   DataSet();  
  OleDbConnection   MyConn=   new   OleDbConnection(MyConnString);  
  OleDbDataAdapter   MyAdapter   =   new   OleDbDataAdapter(strSel,MyConn);  
  MyAdapter.Fill(ds,"Score");  
  dg1.DataSource=ds.Tables["Score"].DefaultView;  
  dg1.DataBind();  
  }  
  </script>  
  <asp:DataGrid   id="dg1"   runat="Server"    
    Headerstyle-BackColor="#aaaadd"  
    AlternatingItemstyle-BackColor="#eeeeee"  
  />  
  将DataAdapter   于   DataSet   相联系的是   DataAdapter   对象的   Fill   方法。他有很多中用法:     MyDataAdapter.Fill(DataSet)                 MyDataAdapter.Fill(DataSet,TableName)  
  MyDataAdapter.Fill(DataSet,   StartRow   ,   RowsCount,   TableName)  
  DataSet   绑定至   DataGrid   控件显示:  
  1.dg1.DataSource=   ds.Tables[“Score”].DefaultView;  
  dg1.DataBind();  
  2.dg1.DataSource=ds;  
  dg1.DataMember=”Score”;  
  dg1.DataBind();  
  提示:   DataSet中的各种集合,访问子项有两种方法,一种是用子项的名,一种是用数字索引.比如要访问表”Score”,可以用:   DataSet.Tables[0]   访问   (多张表依次类推)  
   
  2.   插入数据:   DataSet   的结构和数据库相似,所有插入数据实质上就是在DataSet   的数据表里插入一行(DataRow)  
  //新建一行  
  DataRow   dr=   ds.Tables[“Score”].NewRow();  
                dr.   [“Name”]   =   “addme”;  
                dr.   [“class”]   =”201”;  
  ds.Tables[“Score”].Rows.Add(dr);     //将新建的行加到DataTable   的DataRow集合中  
  这样对DataSet的操作仅仅是在DataSet中执行,并不影响数据库中的数据,要使用DataAdapter   的   Update   方法(有多种方法).  
    1.   DataAdapter.Update(DataSet)   ;       2.   DataAdapter.Update(DataSet,   TableName);  
  3.更新数据:   实际就是在DataSet   数据行上面直接修改数据  
  DataRow   dr   =   ds   .Tables[“Score”].Rows[0];     //取出第一行  
  dr.   [“Name”]   =   “比尔”;     //修改  
                dr.   [“class”]   =”201”;  
  如果要更新数据库,则再调用   Update   方法        
  4.删除数据:   找到相应的数据行,然后删除  
  DataRow   dr   =ds.Tables[“Score”].Row[0];     dr.Delete();  
  注意:   DataAdapter   对象在数据发生改变时,并不能自动产生数据库系统所需的交易sql语句,所有要建立一个CommandBuilder   对象   它能自动产生交易的sql语句.  
  OleDbCommandBuilder   custcb   =   new   OleDbCommandBuilder(MyAdapter);  
  5.DataSet   的其他特征  
  DataSet   、DataTable   和DataRow   都有一个十分有用的方法----RejectChanges,  
  它时操作对象拒绝已经发生的改变,将数据复原.该方法于AcceptChanges   HasErrors等属性连用非常有用.  
  If   (DataSet.HasErrors)  
  {  
    DataSet.RejectChanges();  
  }  
  else  
  {  
    DataSet.AcceptChanges();   
 

posted @ 2009-02-21 10:39  贤  阅读(16947)  评论(6)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3