ADO.NET
来源:互联网 发布:矩阵tr表示什么 编辑:程序博客网 时间:2024/05/17 06:20
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和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对象的一个集合
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中的数据提交到数据库。
DataAdapter和Command的区别
>> Command主要用于运行命令
>> DataAdapter主要用于为多个命令提供一个存储空间,在数据仓库和DataSet之间提供双向交互。
>> 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;
}
///应用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必需带有一个主键字段
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;
}
}
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;
}
}
- ADO 与ADO.NET
- ADO 与ADO.NET
- ADO和ADO.NET
- ADO、ADO.net、DAO
- ADO ADO.NET区别
- ADO与ADO.NET
- ADO 与ADO.NET
- ADO/ADO.NET
- ADO与ADO.Net
- ADO,ADO.NET
- ado.net
- ADO.NET
- ado.net
- ADO.NET
- ADO.NET
- ado.net
- ADO.NET
- ADO.NET
- 粒子群算法测试程序(PSO)
- 学习vc++2005.net
- VS2005编译ACE
- 心理学发现:关掉一些门的好处
- 抓住飘忽不定的CPUID
- ADO.NET
- 无法直接启动带有“类库输出类型”的项目
- JS 货币并格式化判断
- 25岁生日写下第一篇
- 初闻惊诧:微软再遭欧盟9亿欧元重罚
- 软件需求分析--结构化分析(SA)方法
- 《数据库设计入门经典》之第三章笔记
- E文积累_20080228_Put him through
- 在JSP中调用Action的几种方式。