ADO.NET

 
 
 
ADO.NET
 
一、 ADO.NET 基础
1   何为 ADO.NET
ADN.NET 被设计成为遵循一般的更没有面向数据库缺陷的数据库访问准则, ADO.NET 搜集了所有的和数据访问有关的类,这些类由一些数据容器对象组成,这项对象具有一般的数据处理能力 ---indexing,sorting,Viewing,ADO.NET 是为 .NET 数据库应用程序定义的开发办法, ADO.NET 是一个对数据库的整套设计环境,而不是象 ADO 那样只是围绕着数据访问和数据处理的。

    ADO.NET
ADO 大不一样,它是一个新的数据访问程序模型,需要透彻的理解。然而,一旦用户使用了 ADO.NET ,将会发现所有的 ADO 技巧,对用户在 ADO.NET 环境下编程是大有帮助的。
 
       ADO.NET 组件设计用来允许在 .NET Framework 中访问和操作数据。
 
2  ADO.NET 的优点
1 )互操作性:数据以 XML 格式储存,不同工具开发的组件可以通过数据存储进行通信。
2 )性能:因数据以 XML 格式储存,数据传送无需转换,提高了数据访问的效率。
3 )可扩展性: ADO.NET 是一种断开式数据结构,也就是说,从数据库中检索到数据缓存在本机上,只有在操作或更新数据时才需要重新建立连接。这样可以提高应用程序的能务,而不需增加维护成本。
4 )标准化:位于数据集中的数据以 XML 形式保存并在不同的层之间传送。因此使得数据统一成为可以。
5 )可编辑性:在 ADO.NET 中可使用 C# VB.NET 等语言编写程序,因此向开发人员提供情报了强类型化环境,这对于 ADO 是不可能的。
 
3        ADO.NET 的结构
 
(1)        ADO.NET 基本组件
ADO.NET 有两个主要组件: DateSet .Net 数据提供程序。 .NET 数据提供程序包括:
Connection 建立与特定数据源的连接。
Command 对数据源执行命令。公开 Parameters ,并且可以从 Connection Transaction 的范围内执行。
DataReader 从数据源中读取只进且只读的数据流。
DataAdapter 用于管理与数据的连接、执行 SQL 命令并向数据集返回数据。
 
(2)        ADO.NEET 两种数据库连接方式
Connection+Command+DataReader
Connection+DataSet+DataAdpter
 
(3)        命名空间
要使用 SQL .Net Frmaework 数据提供程序,必须引入以下两个命名空间。
System.Data
System.Data.SqlData
 
 
二、 Connection 对象
建立与特定数据源的连接。
String conn = "server=.;database=pet;uid=sa;pwd=sa";
SqlDataAdapter da=new SqlDataAdapter("select * from v_Pet",sqlConn)
 
三、 Command 对象
对数据源执行命令。公开 Parameters ,并且可以从 Connection Transaction 的范围内执行。
 
Command 对象 主要属性:
Connection
:包含数据仓库连接的细节
CommandText
:要运行的命令
CommandType
:命令的类型 Sql 字符或存储过程的名称
                            Text  
表示文本字符串 sql
                            TableDirect
表示表名
                            StoredProcedure
表示存储过程的名称
Parameters
Parameters 对象的一个集合
 
Command 对象 主要方法:
ExecuteReader :执行返回行的命令。这使用检索到的数据创建数据读取器。

ExecuteNonQuery :执行 INSERT DELETE UPDATE SET 语句等命令。 返回受影响的行数。
ExecuteScalar :从数据库中检索单个值(例如一个聚合值)
 
四、 DataReader 对象
从数据源中读取只进且只读的数据流。
 
DataReader 对象的特点
1 只读数据流
2 只能向前读取一条数据
3 一起保持连接状态
4 不能用 new 实例化,用 ExecuteReader() 方法实例化。
5   读取方法 DataReader["filedName"]

DataReader 对象的主要属性
FildCount :返回当前行中的列数
IsClosed :表示 DataReader 是否关闭
RecordsAffected: 表示执行 SQL 语句之后修改、插入或删除的行数。
 
DataReader 对象的主要方法
Close: 用于关闭 DataReader 对象
Read: 使 DataReader 前移到下一条记录。
 
五、 DataAdapter 对象
用于管理与数据的连接、执行 SQL 命令并向数据集返回数据。
DataAdpater 是与数据集( DataSet )一起使用的对象,它包括在和一个数据库连接后用于填充数据集和更新数据源的一组数据命令。
 
DataAdapter 对象的主要方法
Fill :向 DataSet 中表结构里填充数据,若 DataSet 里面没有表结构 (Schema) 的话,同时创建表结构。
da.FillSchema(ds);
 
FillSchem :向 DataSet 中创建和数据源一致的表结构。
da.FillSchema(ds,SchemaType.Source);
 
Update :将 DataSet 中的数据提交到数据库。
 
DataAdapterCommand的区别
   >> Command
主要用于运行命令
   >> DataAdapter
主要用于为多个命令提供一个存储空间,在数据仓库和 DataSet 之间提供双向交互。

  
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);则是对adapter的这四个属性的进入
了预编译.
 
六、 DataSet 对象
数据集 DataSet 相当于一个临时的数据库,它是断开式的、存储于内存中的。
 
数据集 DataSet 是由数据行和列、约束和有关表对表中数据关系的信息组成的 0 个或多个表对象的集合。这些数据缓存到本地机上,不需要与数据库持续连接。
 
数据集 DataSet 有趣的一点是既可以容纳数据库的数据,也可以容纳非数据库的数据。
 
数据集 DataSet 不与数据库直接交互,它只是数据的容器。因此,数据庥独立于任何数据 , 并且可以用于存储各种数据类型,如数据库中的数据以及 Excel 电子表格等非数据库数据。
 
数据集 DataSet 的结构
 
 
数据集DataSet有两种类型:
类型化数据集:在数据填充之前就知道它自己能容纳什么样的数据。
 
非类型化数据集:在数据填充之前不知道它自己能容纳什么样的数据。非类型化数据集中的表和列以集合形式公开。一般我们手动创建的数据集都是非类型化数据集!
访问方式:
 ds.Tables[" 表名" ].Rows[0][" 列名" ]
 
数据集 DataSet 主要属性:
DataSetName :用于获取或设置当前数据集的名称
Tables :用于检索数据集中包含的表的集合
 
数据集 DataSet 主要方法:
Clear :清除数据集中包含的所有表的所有行
HasChanges :返回一个布尔值,表示是否已更改了数据集。
 
DataSet 对象中的 DataTable 对象
数据集中的每个 DataTable 对象表示一个从数据库检索到的表,每个表的列和约束用于定义 DataTable 的结构。
 
DataTable 主要属性:
Columns :表示列的集合或 DataTable 包含的 DataColumn
Constraints :表示指定 DataTable 的约束集合
DataSet :表示 DataTable 所属的数据集,数据集的名称存储在该属性中 .
PrimaryKey :表示作为 DataTable 主键的字段或 DataColumn
Rows :表示行的集合或 DataTable 包含的 DataRow.
 
DataTable 主要方法:
NewRow :添加一个新的 DataRow
AcceptChanges :提交对该表所作的修改。
 
DataTable 对象中的 DataColumn 对象:
DataColumn 对象定义 DataColumn 的列, DataTable 中的 Columns 属性包含对 DataColumn 对象的引用。
 
DataColumn 主要属性:
AllowDBNull :此列是否允许为 null
ColumnName DataColumn 的名称
DataType DataColumn 对象中存储的数据类型
DefaultValue :新建行时该列的默认值
Table DataColumn 所属的 DataTable 的名称
Unique DataColumn 的值是否必须是唯一的。
 
DataTable 对象中的 DataRow 对象:
DataRow 对象表示 DataTable 中的实际数据,而且 DataRow 对象中的数据是可以改变的。
 
DataRow 主要属性:
Item DataRow 的指定列中存储的值
RowState :行的当前状态,有 Added Deleted Detached Modified Unchanged
 
DataRow 主要方法:
AcceptChanges :提交自上次调用 AcceptChanges 之后对该行所做的修改
Delete :删除 DataRow
RejectChanges :拒绝自上次调用 AcceptChanges 之后对该 DataRow 所做的修改
 
DataView 对象
DataView DataTable 中存储的数据的表示层,它提供对 DataTable 进行排序、筛选和搜索的自定义视图。它最得要的作用是允许 WinForms 控件进行数据绑定。
 
DataRow 主要属性:
Item :用于从指定的表中获取一行数据
RowFilter :用于获取或设置表达式,该表达式用于筛选可以在 DataView 中查看的行。
RowStateFilter :用于获取 DataView 的行状态筛选器。 Added CurrentRows 等。
Table :表示源 DataTable
 
DataRow 主要方法:
AddNew :用于向 DataView 添加新行
Delete :用于删除指定索引处的行
 
       
///<summary>
        
///应用DataSet DataTable
        
/// DataColumn DataRow创建的数据集
        
///</summary>
        
///<returns>数据集</returns>

         public  DataSet CreateDataSet()
        
{
            
//建立数据集studentDS
            DataSet ds = new DataSet();
 
            
//建立表Students
            DataTable dt = new DataTable("student");
 
            
//建立表字段:学号
            DataColumn dcStudentNo = dt.Columns.Add("学号"typeof(Int32));
            dcStudentNo.AllowDBNull 
= false;
            dcStudentNo.DefaultValue 
= 25;
 
            
//建立表字段:姓名
            dt.Columns.Add("姓名",typeof(string));
 
            
//建立表字段:成绩
            dt.Columns.Add("成绩",typeof(double));
 
            
//新建行dr,并向表dt增加一行
            DataRow dr = dt.NewRow();
            dr[
"学号"= "101";
            dr[
"姓名"= "张三";
            dr[
"成绩"= "55";
            dt.Rows.Add(dr);
 
            dr 
= dt.NewRow();
            dr[
"学号"= "102";
            dr[
"姓名"= "李四";
            dr[
"成绩"= "88";
            dt.Rows.Add(dr);
 
            dr 
= dt.NewRow();
            
//dr["学号"] = "119";
            dr["姓名"= "王五";
            dr[
"成绩"= "79";
            dt.Rows.Add(dr);
 
            
//创建主健列
            dt.PrimaryKey = new DataColumn[]
            
{
                dt.Columns[
"学号"],
                dt.Columns[
"姓名"]
            }
;
 
            
//把表dt添加到数据集ds中
            ds.Tables.Add(dt);
 
            
return ds;
        }

 
                                                                                                                                                                                            
七、 CommandBuilder 对象
  自动生成单表命令
  OleDbCommandBuilder objBuilder
  objBuilder = new OleDbCommandBuilder(DataAdapter)
  
表示告诉命令生成器可以在哪儿取到 SelectCommand, 以建立其他的命令 .
 
  DataAdapter.UpdateCommand = objBuilder.GetUpdateCommand();
  DataAdapter.InsertCommand = objBuilder.GetInsertCommand();
  DataAdapter.DeleteCommand = objBuilder.GetDeleteCommand();
  
  
注意在这种情况下, SelectCommand 必需带有一个主键字段
 
下面的示例结合 SqlDataAdapter SqlConnection,使用SqlCommand从数据源中选择行。向该示例传递了一个连接字符串、一个查询字符串(它是一个 Transact-SQL SELECT 语句)和一个数据库表名称字符串。然后该示例创建一个 SqlCommandBuilder
public   static  DataSet SelectSqlRows( string  connectionString,
    
string  queryString,  string  tableName)
...
{
    
using (SqlConnection connection = new SqlConnection(connectionString))
    ...
{
        SqlDataAdapter adapter 
= new SqlDataAdapter();
        adapter.SelectCommand 
= new SqlCommand(queryString, connection);
        SqlCommandBuilder builder 
= new SqlCommandBuilder(adapter);
 
        connection.Open();
 
        DataSet dataSet 
= new DataSet();
        adapter.Fill(dataSet, tableName);
 
        
//code to modify data in DataSet here
 
        
//Without the SqlCommandBuilder this line would fail
        adapter.Update(dataSet, tableName);
 
        
return dataSet;
    }

}
 
 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值