加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

ADO.NET读书笔记系列

发布时间:2020-12-15 21:11:26 所属栏目:asp.Net 来源:网络整理
导读:ADO.NET概述 p style="FONT-SIZE: 10pt"??? 一、。NET数据提供程序 p style="FONT-SIZE: 10pt"??? 。Net框架提供数据提供程序:SQL Client .NET Data Provider和Ole DB .NET Data Provider.前者专为SQL Server7以及以后的版本的数据库进行通信而设计,后者允

ADO.NET概述
<p style="FONT-SIZE: 10pt">??? 一、。NET数据提供程序


<p style="FONT-SIZE: 10pt">??? 。Net框架提供数据提供程序:SQL Client .NET Data Provider和Ole DB .NET Data Provider.前者专为SQL Server7以及以后的版本的数据库进行通信而设计,后者允许通过OLE DB提供程序与各种数据存储进行通信。无论使用哪种方式,所编写的代码都很相似。


<p style="FONT-SIZE: 10pt">??? 二、对象分类概述


<p style="FONT-SIZE: 10pt">??? 1、? 连接的对象


<p style="FONT-SIZE: 10pt">??? Ⅰ、Connection对象:


<p style="FONT-SIZE: 10pt">??? 表示与数据源之间的连接。可通过Connection对象的各种不同属性指定数据源的类型、位置以及其他属性,可用它来与数据库建立连接或断开连接。Connection对象起到渠道的作用,其他对象如DataAdapter和Command对象通过它与数据库通信。


<p style="FONT-SIZE: 10pt">??? Ⅱ、Command对象:


<p style="FONT-SIZE: 10pt">??? 表示对数据库的查询、对存储过程的调用或要返回特定表内容的直接请求。可使用Command对象对数据库执行任何一种查询操作。


<p style="FONT-SIZE: 10pt">??? Ⅲ、DataReader对象:


<p style="FONT-SIZE: 10pt">??? DataReder用于以最快的数据检索并检查查询所返回的行。可使用DataReader对象来检查查询结果,一次查询一行,当移到下一行时,前一行的内容就会被放弃。DataReader不支持更新操作,由DataReader返回的数据是只读的。由于DataReader对象支持最小特性集,所以它的速度非常快,而且是轻量的。


<p style="FONT-SIZE: 10pt">??? Ⅳ、Transaction对象:


<p style="FONT-SIZE: 10pt">??? Connection对象有一个BeginTransaction方法,可用来创建Transaction对象。该对象可用来在??? Transaction对象的生存期提交或取消对数据库所做的更改。


<p style="FONT-SIZE: 10pt">??? Ⅴ、Parameter对象:


<p style="FONT-SIZE: 10pt">??? 要使用参数化的Command对象,可先为查询中的每个参数创建Parameter对象,并将它们添加到Command对象的Paramters集合中。ADO.NET的Parameter对象公开一些属性和方法,可用来定义参数的数据类型和值。


<p style="FONT-SIZE: 10pt">??? Ⅵ、DataAdapter对象:


<p style="FONT-SIZE: 10pt">??? DataAdapter对象充当数据库和ADO.NET对象模型中断开连接的对象之间的桥梁。DataAdapter对象会填充DataSet对象中的表,而且能读取缓存的更改并将其提交给数据库。


<p style="FONT-SIZE: 10pt">??? 2、? 断开连接的对象


<p style="FONT-SIZE: 10pt">??? Ⅰ、DataTable对象:


<p style="FONT-SIZE: 10pt">??? DataTable对象允许您通过行和列的集合查看数据。通过DataAdapter对象的Fill方法,可以将查询的结果存储在DataTable中。一旦从数据库中读出了数据,将其存储在DataTable对象中,数据与服务器之间的连接就断开拉。


<p style="FONT-SIZE: 10pt">??? DataTable类包含了其他断开连接对象的集合。例如:DataRow,DataColumn,Constraints等。


<p style="FONT-SIZE: 10pt">??? Ⅱ、DataColumn对象:


<p style="FONT-SIZE: 10pt">??? 每个DataTable都有一个Columns集合,该集合是DataColumn对象的容器。DataColumn对象存储了有关列结构的信息。


<p style="FONT-SIZE: 10pt">??? Ⅲ、Constraint对象:


<p style="FONT-SIZE: 10pt">??? Constraint对象存在于DataTable对象的Constraints集合中,可以建立一个Constraint对象,确保某一列或多个列中的值在DataTable中是惟一的。


<p style="FONT-SIZE: 10pt">??? Ⅳ、DataRow对象:


<p style="FONT-SIZE: 10pt">??? 想要访问存储在DataTable对象中的实际值,可以使用对象的Rows集合,该集合中包含了一组DataRow对象。DataTable通过DataRows的集合使得所有数据行都可以访问。DataRow对象也是更新的起点。


<p style="FONT-SIZE: 10pt">??? Ⅴ、DataSet对象:


<p style="FONT-SIZE: 10pt">??? 可以将DataSet对象视为一些DataTable对象的容器。DataSet对象还有一些属性,可以向文件、内存地址写入,或读出该对象;可以只保存DataSet对象的内容或只保存DataSet对象的结构,也可以两者都保存。


<p style="FONT-SIZE: 10pt">??? Ⅵ、DataRelation对象:


<p style="FONT-SIZE: 10pt">??? DataSet类定义了一个Realtion属性,该属性是DataRelation对象的一个集合,可以使用DataRelation对象来表明DataSet中不同的DataTable对象之间的关系。


<p style="FONT-SIZE: 10pt">??? DataRelation对象还引入了一些属性,来强化引用的完整性。


<p style="FONT-SIZE: 10pt">??? Ⅶ、DataView对象:


<p style="FONT-SIZE: 10pt">??? 一旦获取了DataTable对象中查询的结果,就可以使用DataView对象以不同方式来查看数据。可以使用多个DataView对象在同时查看同一DataTable.


<p style="FONT-SIZE: 10pt">??? 3、? 强类型DataSet对象


<p style="FONT-SIZE: 10pt">??? 强类型的DataSet可以帮助简化建立数据访问应用程序的过程。强类型DataSet是Visual Studio中的一个类,Visual Studio建立它的时候,通过其属性使所有的表和列信息都有效。强类型DataSet对象还为入创建新行等属性提供了一些自定义方法。


<p style="FONT-SIZE: 10pt">??? Connection对象


<p style="FONT-SIZE: 10pt">??? 一、特点介绍


<p style="FONT-SIZE: 10pt">??? 在ADO.NET对象模型中,Connection对象代表了与数据库之间的连接。可以使用Connection对象的属性来指定用户凭据以及数据源的位置。


<p style="FONT-SIZE: 10pt">??? 二、使用介绍


<p style="FONT-SIZE: 10pt">??? 1、基本使用


<p style="FONT-SIZE: 10pt">??? string strConn=“data source =192.168.1.81;initial catalog =Northwind;persist security info=false; user id=sa;password=;”;


<p style="FONT-SIZE: 10pt">??? SqlConnection cn = new SqlConnection(strConn);


<p style="FONT-SIZE: 10pt">??? cn.Open();


<p style="FONT-SIZE: 10pt">??? ……………


<p style="FONT-SIZE: 10pt">??? cn.Close();


<p style="FONT-SIZE: 10pt">??? 2、连接池


<p style="FONT-SIZE: 10pt">??? 默认情况下使用连接池;


<p style="FONT-SIZE: 10pt">??? 当不想使用时:在Ole DB连接字符串中加入“OLE DB Service=-4”;


<p style="FONT-SIZE: 10pt">??? 在Sql连接字符串中加入“Pooling=false”;


<p style="FONT-SIZE: 10pt">??? 3、与其他对象关系


<p style="FONT-SIZE: 10pt">??? Ⅰ、创建Commands


<p style="FONT-SIZE: 10pt">??? string strConn=“………”;


<p style="FONT-SIZE: 10pt">??? SqlConnection cn=new SqlConnection(strConn);


<p style="FONT-SIZE: 10pt">??? cn.Open();


<p style="FONT-SIZE: 10pt">??? SqlCommand cmd = cn.CreateCommand();


<p style="FONT-SIZE: 10pt">??? Ⅱ、启动事务


<p style="FONT-SIZE: 10pt">??? string strConn=“………”;


<p style="FONT-SIZE: 10pt">??? SqlConnection cn=new SqlConnection(strConn);


<p style="FONT-SIZE: 10pt">??? cn.Open();


<p style="FONT-SIZE: 10pt">??? SqlTransaction txn = cn.BeginTransaction();


<p style="FONT-SIZE: 10pt">??? 三、属性方法事件介绍


<p style="FONT-SIZE: 10pt">??? 1、属性


<p style="FONT-SIZE: 10pt">??? ⒈ConnectionString: 连接字符串,其中包含源数据库名称和建立初始连接所需的其他参数。默认值为空字符串。只能在Connection未与数据源连接时设置其属性,当连接到数据源时,属性是只读的。


<p style="FONT-SIZE: 10pt">??? ⒉ConnectionTimeOut: 等待连接打开的时间(以秒为单位)。默认值为 15 秒。


<p style="FONT-SIZE: 10pt">??? ⒊Database:当前数据库的名称或连接打开后要使用的数据库的名称。默认值为空字符串。


<p style="FONT-SIZE: 10pt">??? ⒋DataSource:要连接的 SQL Server 实例的名称。默认值为空字符串。


<p style="FONT-SIZE: 10pt">??? ⒌State:ConnectionState值的按位组合。默认值为Closed.


<p style="FONT-SIZE: 10pt">??? 成员名称说明值


<p style="FONT-SIZE: 10pt">??? Broken与数据源的连接中断。只有在连接打开之后才可能发生这种情况。可以关闭处于这种状态的连接,然后重新打开。


<p style="FONT-SIZE: 10pt">??? 16


<p style="FONT-SIZE: 10pt">??? Closed连接处于关闭状态。


<p style="FONT-SIZE: 10pt">??? 0


<p style="FONT-SIZE: 10pt">??? Connecting连接对象正在与数据源连接。


<p style="FONT-SIZE: 10pt">??? 2


<p style="FONT-SIZE: 10pt">??? Executing连接对象正在执行命令。


<p style="FONT-SIZE: 10pt">??? 4


<p style="FONT-SIZE: 10pt">??? Fetching连接对象正在检索数据。


<p style="FONT-SIZE: 10pt">??? 8


<p style="FONT-SIZE: 10pt">??? Open连接处于打开状态。


<p style="FONT-SIZE: 10pt">??? 1


<p style="FONT-SIZE: 10pt">??? ⒍ServerVersion:SQL Server 实例的版本。版本的格式为 ##.##.####,其中前两位是主版本,中间两位是次版本,最后四位是发布版本。该字符串的格式为 major.minor.build,其中 major 和 minor 必须为两位数,build 必须为四位数。


<p style="FONT-SIZE: 10pt">??? ⒎PacketSize: 网络数据包的大小(以字节为单位)默认值为 8192.如果应用程序执行批量复制操作,或者发送或接收大量的文本或图像数据,则使用比默认大小大的数据包可提高效率,因为它可减少网络的读取和写入操作。如果应用程序发送或接收少量信息,则可以将数据包大小设置为 512 字节,该设置足以应付大多数数据传送操作。对于大多数应用程序而言,最好使用默认的数据包大小。


<p style="FONT-SIZE: 10pt">??? PacketSize 可以是 512 和 32767 字节范围内的一个值。如果该值超出了这个范围,就会产生异常。


<p style="FONT-SIZE: 10pt">??? 2、方法


<p style="FONT-SIZE: 10pt">??? ⒈BeginTransaction:开始数据事务


<p style="FONT-SIZE: 10pt">??? ⒉ChangeDatabase:在一个打开的连接上更改当前数据库


<p style="FONT-SIZE: 10pt">??? ⒊Close:关闭连接


<p style="FONT-SIZE: 10pt">??? ⒋CreateCommand:为当前连接创建一个SqlCommand


<p style="FONT-SIZE: 10pt">??? ⒌Open:打开连接


<p style="FONT-SIZE: 10pt">??? 3、事件


<p style="FONT-SIZE: 10pt">??? ⒈InfoMessage:当 SQL Server 返回一个警告或信息性消息时发生。


<p style="FONT-SIZE: 10pt">??? 当 Sql Server 返回严重度等于或小于 10 的消息时,会激发 InfoMessage 事件。严重度在 11 和 20 之间的消息会引发错误,而严重度超过 20 的消息将导致连接关闭。


<p style="FONT-SIZE: 10pt">??? ⒉StateChange:当连接状态更改时发生。只要Connection对象的State属性值发生变化,该对象的StateChange事件就会被触发。SqlDataAdapter对象


<p style="FONT-SIZE: 10pt">??? 一、特点介绍


<p style="FONT-SIZE: 10pt">??? 1、表示用于填充 DataSet 和更新 SQL Server 数据库的一组数据命令和一个数据库连接。


<p style="FONT-SIZE: 10pt">??? 2、在SqlDataAdapter和DataSet之间没有直接连接。当完成SqlDataAdpater.Fill(DataSet)调用后,两个对象之间就没有连接了。


<p style="FONT-SIZE: 10pt">??? 二、使用介绍


<p style="FONT-SIZE: 10pt">??? 1、创建SqlDataAdapter


<p style="FONT-SIZE: 10pt">??? ……


<p style="FONT-SIZE: 10pt">??? string strSQL=“Select from Customers”;


<p style="FONT-SIZE: 10pt">??? SqlCommand cmd=new SqlCommand(strSQL,cn);


<p style="FONT-SIZE: 10pt">??? SqlDataAdapter da=new SqlDataAdapter();


<p style="FONT-SIZE: 10pt">??? da.SelectCommand=cmd;


<p style="FONT-SIZE: 10pt">??? 2、SqlDataAdapter构造函数


<p style="FONT-SIZE: 10pt">??? ①string strConn=“Provider=……”;


<p style="FONT-SIZE: 10pt">??? string strSQL=“select
from Customers”;


<p style="FONT-SIZE: 10pt">??? SqlDataAdapter da=new SqlDataAdapter(strSQL,strConn);


<p style="FONT-SIZE: 10pt">??? ②string strConn=“Provider=……”;


<p style="FONT-SIZE: 10pt">??? SqlConnection cn=new SqlConnection(strConn);


<p style="FONT-SIZE: 10pt">??? SqlDataAdapter da=new SqlDataAdapter(“select from Customers”,cn);


<p style="FONT-SIZE: 10pt">??? ③string strConn=“Provider=……”;


<p style="FONT-SIZE: 10pt">??? string strSQL=“select
from Customers”;


<p style="FONT-SIZE: 10pt">??? SqlConnection cn=new SqlConnection(strConn);


<p style="FONT-SIZE: 10pt">??? SqlCommand cmd=new SqlCommand(strSQL,cn);


<p style="FONT-SIZE: 10pt">??? SqlDataAdapter da=new SqlDataAdapter(cmd);


<p style="FONT-SIZE: 10pt">??? 3、从查询中获取结果


<p style="FONT-SIZE: 10pt">??? ①使用Fill方法


<p style="FONT-SIZE: 10pt">??? ……


<p style="FONT-SIZE: 10pt">??? SqlDataAdapter da=new SqlDataAdapter(strSQL,strConn);


<p style="FONT-SIZE: 10pt">??? DataSet ds=new DataSet();


<p style="FONT-SIZE: 10pt">??? da.Fill(ds);?? //这里ds中的表名为Table


<p style="FONT-SIZE: 10pt">??? ②使用Fill方法创建DataTable对象和DataColumn对象


<p style="FONT-SIZE: 10pt">??? ……


<p style="FONT-SIZE: 10pt">??? SqlDataAdapter da=new SqlDataAdapter(strSQL,strConn);


<p style="FONT-SIZE: 10pt">??? da.TableMapping.Add(“Table”,“Customers”);


<p style="FONT-SIZE: 10pt">??? DataSet ds=new DataSet();


<p style="FONT-SIZE: 10pt">??? da.Fill(ds);


<p style="FONT-SIZE: 10pt">??? ③使用重载Fill方法


<p style="FONT-SIZE: 10pt">??? SqlDataAdapter.Fill(DataSet,“Customers”);


<p style="FONT-SIZE: 10pt">??? SqlDataAdapter.Fill(DataTable);


<p style="FONT-SIZE: 10pt">??? SqlDataAdapter.Fill(DataSet,intStartRecord,intNumRecords,“TableName”);


<p style="FONT-SIZE: 10pt">??? ④开放和关闭连接


<p style="FONT-SIZE: 10pt">??? 如果调用了一个SqlDataAdapter对象的Fill方法,而SelectCommand属性的Connection关闭了,那么SqlDataAdapter就会开放一个连接,然后提交查询、获取结果、最后关闭连接。如果在调用前开放了Connection,那么操作之后仍然保持开放。


<p style="FONT-SIZE: 10pt">??? ……


<p style="FONT-SIZE: 10pt">??? SqlDataAdapter daCustomers,daOrders;


<p style="FONT-SIZE: 10pt">??? daCustomers=new SqlDataAdapter(“Select from Customers”,cn);


<p style="FONT-SIZE: 10pt">??? daOrders=new SqlDataAdapter(“Select
from Orders”,cn);


<p style="FONT-SIZE: 10pt">??? DataSet ds=new DataSet();


<p style="FONT-SIZE: 10pt">??? cn.Open();


<p style="FONT-SIZE: 10pt">??? daCustomers.Fill(ds);


<p style="FONT-SIZE: 10pt">??? daOrders.Fill(ds);


<p style="FONT-SIZE: 10pt">??? cn.Close();


<p style="FONT-SIZE: 10pt">??? ⑤多次调用Fill方法


<p style="FONT-SIZE: 10pt">??? 刷新DataSet中的数据,最简单的解决方法就是清空DataSet(或DataTable),然后再次调用DataAdapter对象的Fill方法。


<p style="FONT-SIZE: 10pt">??? 三、属性方法事件介绍


<p style="FONT-SIZE: 10pt">??? 1、属性


<p style="FONT-SIZE: 10pt">??? ①AcceptChangeDuringFill:确定由DataAdapter所获取的行的RowState(默认为True)。


<p style="FONT-SIZE: 10pt">??? ②DeleteCommand:获取或设置一个 Transact-SQL 语句或存储过程,以从数据集删除记录。


<p style="FONT-SIZE: 10pt">??? ③InsertCommand:获取或设置一个 Transact-SQL 语句或存储过程,以在数据源中插入新记录。


<p style="FONT-SIZE: 10pt">??? ④SelectCommand:获取或设置一个 Transact-SQL 语句或存储过程,用于在数据源中选择记录。


<p style="FONT-SIZE: 10pt">??? ⑤UpdateCommand:获取或设置一个 Transact-SQL 语句或存储过程,用于更新数据源中的记录。


<p style="FONT-SIZE: 10pt">??? ⑥TableMappings:SqlDataAdapter用来将查询的结果映射到DataSet的信息集合。


<p style="FONT-SIZE: 10pt">??? ⑦ContinueUpdate:控制SqlDataAdapter在遇到一个错误之后是否继续提交更改(默认为false)。


<p style="FONT-SIZE: 10pt">??? 2、方法


<p style="FONT-SIZE: 10pt">??? ①Fill:执行存储于SelectCommand中的查询,并将结果存储在DataTable中。


<p style="FONT-SIZE: 10pt">??? ②FillSchema:为存储在SelectCommand中存储的查询获取架构信息。获取查询中的各列名称和数据类型。


<p style="FONT-SIZE: 10pt">??? ③GetFillParameters:为SelectCommand获取一个包含着参数的数组。


<p style="FONT-SIZE: 10pt">??? ④Update:向数据库提交存储在DataSet(或DataTable、DataRows)中的更改。该方法会返回一个整数值,其中包含着在数据存储中成功更新的行数。


<p style="FONT-SIZE: 10pt">??? 3、事件


<p style="FONT-SIZE: 10pt">??? ①FillError:当DataAdapter遇到填充DataSet或DataTable的一个错误时,该事件被触发。


<p style="FONT-SIZE: 10pt">??? ②RowUpdated:向数据库提交一个修改的行之后被触发。


<p style="FONT-SIZE: 10pt">??? ③RowUpdating:向数据库提交一个修改的行之前被触发。DataSet对象


<p style="FONT-SIZE: 10pt">??? 一、特点介绍


<p style="FONT-SIZE: 10pt">??? 1、处理脱机数据,在多层应用程序中很有用。


<p style="FONT-SIZE: 10pt">??? 2、可以在任何时候查看DataSet中任意行的内容,允许修改查询结果的方法。


<p style="FONT-SIZE: 10pt">??? 3、处理分级数据


<p style="FONT-SIZE: 10pt">??? 4、缓存更改


<p style="FONT-SIZE: 10pt">??? 5、XML的完整性:DataSet对象和XML文档几乎是可互换的。


<p style="FONT-SIZE: 10pt">??? 二、使用介绍


<p style="FONT-SIZE: 10pt">??? 1、创建DataSet对象:DataSet ds = new DataSet("DataSetName");


<p style="FONT-SIZE: 10pt">??? 2、查看调用SqlDataAdapter.Fill创建的结构


<p style="FONT-SIZE: 10pt">??? da.Fill(ds,"Orders");


<p style="FONT-SIZE: 10pt">??? DataTable tbl = ds.Table[0];


<p style="FONT-SIZE: 10pt">??? foreach(DataColumn col in tbl.Columns)


<p style="FONT-SIZE: 10pt">??? Console.WriteLine(col.ColumnName);


<p style="FONT-SIZE: 10pt">??? 3、查看SqlDataAdapter返回的数据


<p style="FONT-SIZE: 10pt">??? ①、DataRow对象


<p style="FONT-SIZE: 10pt">??? DataTable tbl = ds.Table[0];


<p style="FONT-SIZE: 10pt">??? DataRow row = tbl.Row[0];


<p style="FONT-SIZE: 10pt">??? Console.WriteLine(ros["OrderID"]);


<p style="FONT-SIZE: 10pt">??? ②、检查存储在DataRow中的数据


<p style="FONT-SIZE: 10pt">??? DataTable tbl = row.Table;


<p style="FONT-SIZE: 10pt">??? foreach(DataColumn col in tbl.Columns)


<p style="FONT-SIZE: 10pt">??? Console.WriteLine(row[col]);


<p style="FONT-SIZE: 10pt">??? ③、检查DatTable中的DataRow对象


<p style="FONT-SIZE: 10pt">??? foreach(DataRow row in tbl.Rows)


<p style="FONT-SIZE: 10pt">??? DisplayRow(row);


<p style="FONT-SIZE: 10pt">??? 4、校验DataSet中的数据


<p style="FONT-SIZE: 10pt">??? ①、校验DataColumn的属性:ReadOnly,AllowDBNull,MaxLength,Unique


<p style="FONT-SIZE: 10pt">??? ②、DataTable对象的Constrains集合:UiqueConstraints,Primarykey,ForeignkeyConstraints


<p style="FONT-SIZE: 10pt">??? 通常不必刻意去创建ForeignkeyConstraints,因为当在DataSet的两个DataTable对象之间创建关系时会创建一个。


<p style="FONT-SIZE: 10pt">??? ③、用SqlDataAdapter.Fill模式来检索模式信息


<p style="FONT-SIZE: 10pt">??? 5、编写代码创建DataTable对象


<p style="FONT-SIZE: 10pt">??? ①、创建DataTable对象:DataTable tbl = new DataTable("TableName");


<p style="FONT-SIZE: 10pt">??? ②、将DataTable添加到DataSet对象的Table集合


<p style="FONT-SIZE: 10pt">??? DataSet ds = new DataSet();


<p style="FONT-SIZE: 10pt">??? DataTable tbl = new DataTable("Customers");


<p style="FONT-SIZE: 10pt">??? ds.Tables.Add(tbl);


<p style="FONT-SIZE: 10pt">??? DataSet ds = new DataSet();


<p style="FONT-SIZE: 10pt">??? DataTable tbl = ds.Tables.Add("Customers");


<p style="FONT-SIZE: 10pt">??? DataTable对象只能存在于至多一个DataSet对象中。如果希望将DataTable添加到多个DataSet中,就必须使用Copy方法或Clone方法。Copy方法创建一个与原DataTable结构相同并且包含相同行的新DataTable;Clone方法创建一个与原DataTable结构相同,但没有包含任何行的新DataTable.


<p style="FONT-SIZE: 10pt">??? ③、为DataTable添加列


<p style="FONT-SIZE: 10pt">??? DataTable tbl = ds.Tables.Add("Orders");


<p style="FONT-SIZE: 10pt">??? DataColumn col =tbl.Columns.Add("OrderID",typeof(int));


<p style="FONT-SIZE: 10pt">??? col.AllowDBNull = false;


<p style="FONT-SIZE: 10pt">??? col.MaxLength = 5;


<p style="FONT-SIZE: 10pt">??? col.Unique = true;


<p style="FONT-SIZE: 10pt">??? tbl.PrimaryKey = new DataColumn[]{tbl.Columns["CustomersID"]};


<p style="FONT-SIZE: 10pt">??? 当设置主键时,AllowDBNull自动设置为False;


<p style="FONT-SIZE: 10pt">??? ④、处理自动增量列


<p style="FONT-SIZE: 10pt">??? DataSet ds = new DataSet();


<p style="FONT-SIZE: 10pt">??? DataTable tbl = ds.Tables.Add("Orders");


<p style="FONT-SIZE: 10pt">??? DataColumn col = tbl.Columns.Add("OrderID",typeof(int));


<p style="FONT-SIZE: 10pt">??? col.AutoIncrement = true;


<p style="FONT-SIZE: 10pt">??? col.AutoIncrementSeed = -1;


<p style="FONT-SIZE: 10pt">??? col.AutoIncrementStep = -1;


<p style="FONT-SIZE: 10pt">??? col.ReadOnly = true;


<p style="FONT-SIZE: 10pt">??? ⑤、添加基于表达式的列


<p style="FONT-SIZE: 10pt">??? tbl.Columns.Add("ItemTotal",typeof(Decimal),"Quantity*UnitPrice");


<p style="FONT-SIZE: 10pt">??? 6、修改DataTable内容


<p style="FONT-SIZE: 10pt">??? ①、添加新DataRow


<p style="FONT-SIZE: 10pt">??? DataRow row = ds.Tables["Customers"].NewRow();


<p style="FONT-SIZE: 10pt">??? row["CustomerID"] = "ALFKI";


<p style="FONT-SIZE: 10pt">??? ds.Tables["Customers"].Rows.Add(row);


<p style="FONT-SIZE: 10pt">??? object[] aValues ={"ALFKI","Alfreds","Anders","030-22222"};


<p style="FONT-SIZE: 10pt">??? da.Tables["Customers"].LoadDataRow(aValues,false);


<p style="FONT-SIZE: 10pt">??? ②、修改当前行


<p style="FONT-SIZE: 10pt">??? 修改行的内容逼供内不会自动修改数据库中相应的内容,对行所做的修改被视为是随后将使用SqlDataAdapter对象来提交交给数据库的待定的更改。


<p style="FONT-SIZE: 10pt">??? DataRow rowCustomer;


<p style="FONT-SIZE: 10pt">??? rowCustomer = ds.Tables["Custoemrs"].Rows.Find("ANTON");


<p style="FONT-SIZE: 10pt">??? if(rowCustomer == null)


<p style="FONT-SIZE: 10pt">??? //没有查找客户


<p style="FONT-SIZE: 10pt">??? else


<p style="FONT-SIZE: 10pt">??? {


<p style="FONT-SIZE: 10pt">??? rowCustomer["CompanyName"] ="NewCompanyName";


<p style="FONT-SIZE: 10pt">??? rowCustomer["ContactName"] ="NewContactName";


<p style="FONT-SIZE: 10pt">??? }


<p style="FONT-SIZE: 10pt">??? //推荐使用这种方式


<p style="FONT-SIZE: 10pt">??? DataRow rowCustomer;


<p style="FONT-SIZE: 10pt">??? rowCustomer = ds.Tables["Custoemrs"].Rows.Find("ANTON");


<p style="FONT-SIZE: 10pt">??? if(rowCustomer == null)


<p style="FONT-SIZE: 10pt">??? //没有查找客户


<p style="FONT-SIZE: 10pt">??? else


<p style="FONT-SIZE: 10pt">??? {


<p style="FONT-SIZE: 10pt">??? rowCustomer.BeginEdit();


<p style="FONT-SIZE: 10pt">??? rowCustomer["CompanyName"] ="NewCompanyName";


<p style="FONT-SIZE: 10pt">??? rowCustomer["ContactName"] ="NewContactName";


<p style="FONT-SIZE: 10pt">??? rowCustomer.EndEdit();


<p style="FONT-SIZE: 10pt">??? }


<p style="FONT-SIZE: 10pt">??? //null表示不修改该列的数据


<p style="FONT-SIZE: 10pt">??? obejct[] aCustomer ={null,"NewCompanyName","NewContactName",null}


<p style="FONT-SIZE: 10pt">??? DataRow rowCustomer;


<p style="FONT-SIZE: 10pt">??? rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");


<p style="FONT-SIZE: 10pt">??? rowCustomer.ItemArray = aCustomer;


<p style="FONT-SIZE: 10pt">??? ③、处理DataRow的空值


<p style="FONT-SIZE: 10pt">??? //查看是否为空


<p style="FONT-SIZE: 10pt">??? DataRow rowCustomer;


<p style="FONT-SIZE: 10pt">??? rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");


<p style="FONT-SIZE: 10pt">??? if(rowCustomer.IsNull("Phone"))


<p style="FONT-SIZE: 10pt">??? Console.WriteLine("It's Null");


<p style="FONT-SIZE: 10pt">??? else


<p style="FONT-SIZE: 10pt">??? Console.WriteLine("It's not Null");


<p style="FONT-SIZE: 10pt">??? //赋予空值


<p style="FONT-SIZE: 10pt">??? rowCustomer["Phone"] = DBNull.Value;


<p style="FONT-SIZE: 10pt">??? ④、删除DataRow


<p style="FONT-SIZE: 10pt">??? DataRow rowCustomer;


<p style="FONT-SIZE: 10pt">??? rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");


<p style="FONT-SIZE: 10pt">??? rowCustomer.Delete();


<p style="FONT-SIZE: 10pt">??? ⑤、清除DataRow


<p style="FONT-SIZE: 10pt">??? DataRow rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");


<p style="FONT-SIZE: 10pt">??? rowCustomer.ItemArray = aCustomer;


<p style="FONT-SIZE: 10pt">??? da.Tables["Customers"].Remove(rowCustomer);


<p style="FONT-SIZE: 10pt">??? 或者


<p style="FONT-SIZE: 10pt">??? ds.Tables["Customers"].RemoveAt(intIndex);


<p style="FONT-SIZE: 10pt">??? ⑥、使用DataRow.RowState属性 :Unchanged,Detached,Added,Modified,Deleted


<p style="FONT-SIZE: 10pt">??? private void DemonstrateRowState()


<p style="FONT-SIZE: 10pt">??? { // Run a function to create a DataTable with one column. DataTable myTable = MakeTable();DataRow myRow;


<p style="FONT-SIZE: 10pt">??? // Create a new DataRow. myRow = myTable.NewRow();// Detached row. Console.WriteLine("New Row " + myRow.RowState);


<p style="FONT-SIZE: 10pt">??? myTable.Rows.Add(myRow);// New row. Console.WriteLine("AddRow " + myRow.RowState);


<p style="FONT-SIZE: 10pt">??? myTable.AcceptChanges();// Unchanged row. Console.WriteLine("AcceptChanges " + myRow.RowState);


<p style="FONT-SIZE: 10pt">??? myRow["FirstName"] = "Scott";// Modified row. Console.WriteLine("Modified " + myRow.RowState);


<p style="FONT-SIZE: 10pt">??? myRow.Delete();// Deleted row. Console.WriteLine("Deleted " + myRow.RowState);}


<p style="FONT-SIZE: 10pt">??? ⑦、检查DataRow中的挂起更改


<p style="FONT-SIZE: 10pt">??? DataRow rowCustomer;


<p style="FONT-SIZE: 10pt">??? rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");


<p style="FONT-SIZE: 10pt">??? rowCustomer["CompanyName"] = "NewCompanyName";


<p style="FONT-SIZE: 10pt">??? string strNewCompanyName,strOldCompanyName;


<p style="FONT-SIZE: 10pt">??? Console.WriteLine(rowCustomer["CompanyName",DataRowVersion.Current]);


<p style="FONT-SIZE: 10pt">??? Console.WriteLine(rowCustomer["CompanyName",DataRowVersion.Original]);


<p style="FONT-SIZE: 10pt">??? 三、属性方法事件介绍


<p style="FONT-SIZE: 10pt">??? 1、DataSet


<p style="FONT-SIZE: 10pt">??? ①、属性


<p style="FONT-SIZE: 10pt">??? CaseSensitive:用于控制DataTable中的字符串比较是否区分大小写。


<p style="FONT-SIZE: 10pt">??? DataSetName:当前DataSet的名称。如果不指定,则该属性值设置为"NewDataSet".如果将DataSet内容写入XML文件,DataSetName是XML文件的根节点名称。


<p style="FONT-SIZE: 10pt">??? DesignMode:如果在设计时使用组件中的DataSet,DesignMode返回True,否则返回False.


<p style="FONT-SIZE: 10pt">??? HasErrors:表示DataSet中的DataRow对象是否包含错误。如果将一批更改提交给数据库并将DataAdapter对象的ContinueUpdateOnError属性设置为True,则在提交更改后必须检查DataSet的HasErrors属性,以确定是否有更新失败。


<p style="FONT-SIZE: 10pt">??? NameSpace和Prefix:指定XML命名空间和前缀


<p style="FONT-SIZE: 10pt">??? Relations:返回一个DataRelationCollection对象。


<p style="FONT-SIZE: 10pt">??? Tables:检查现有的DataTable对象。通过索引访问DataTable有更好的性能。


<p style="FONT-SIZE: 10pt">??? ②、方法


<p style="FONT-SIZE: 10pt">??? AcceptChanges和RejectChanges:接受或放弃DataSet中所有挂起更改。调用AcceptChanges时,RowState属性值为Added或Modified的所有行的RowState属性都将被设置为UnChanged.任何标记为Deleted的DataRow对象将从DataSet中删除。调用RejectChanges时,任何标记为Added的DataRow对象将会被从DataSet中删除,其他修改过的DatRow对象将返回前一状态。


<p style="FONT-SIZE: 10pt">??? Clear:清除DataSet中所有DataRow对象。该方法比释放一个DataSet然后再创建一个相同结构的新DataSet要快。


<p style="FONT-SIZE: 10pt">??? Clone和Copy:使用Copy方法会创建与原DataSet具有相同结构和相同行的新DataSet.使用Clone方法会创建具有相同结构的新DataSet,但不包含任何行。


<p style="FONT-SIZE: 10pt">??? GetChanges:返回与原DataSet对象具有相同结构的新DataSet,并且还包含原DataSet中所有挂起更改的行。


<p style="FONT-SIZE: 10pt">??? GetXml和GetXmlSchema:使用GetXml方法得到由DataSet的内容与她的架构信息转换为XML格式后的字符串。如果只希望返回架构信息,可以使用GetXmlSchema.


<p style="FONT-SIZE: 10pt">??? HasChange:表示DataSet中是否包含挂起更改的DataRow对象。


<p style="FONT-SIZE: 10pt">??? Merge:从另一个DataSet、DataTable或现有DataSet中的一组DataRow对象载入数据。


<p style="FONT-SIZE: 10pt">??? ReadXml和WriteXml:使用ReadXml方法从文件、TextReader、数据流或者XmlReader中将XML数据载入DataSet中。


<p style="FONT-SIZE: 10pt">??? Reset:将DataSet返回为未初始化状态。如果想放弃现有DataSet并且开始处理新的DataSet,使用Reset方法比创建一个DataSet的新实例好。


<p style="FONT-SIZE: 10pt">??? ③、事件


<p style="FONT-SIZE: 10pt">??? MergeFailed:在DataSet的Merge方法发生一个异常时触发。


<p style="FONT-SIZE: 10pt">??? 2、DataTable


<p style="FONT-SIZE: 10pt">??? ①、属性


<p style="FONT-SIZE: 10pt">??? ②、方法


<p style="FONT-SIZE: 10pt">??? ③、事件


<p style="FONT-SIZE: 10pt">??? ColumnChanged:在列的内容被改变之后触发


<p style="FONT-SIZE: 10pt">??? ColumnChangding:在列的内容被改变之前触发


<p style="FONT-SIZE: 10pt">??? RowChanged,RowChanging,RowDeleted,RowDeleting.


<p style="FONT-SIZE: 10pt">??? 3、DataColumn


<p style="FONT-SIZE: 10pt">??? ①、属性


<p style="FONT-SIZE: 10pt">??? 4、DataRow


<p style="FONT-SIZE: 10pt">??? ①、属性


<p style="FONT-SIZE: 10pt">??? HasError:确定行是否包含错误。


<p style="FONT-SIZE: 10pt">??? Item:通过指定行的列数,列的名称或DataColumn对象本身,访问列的内容。


<p style="FONT-SIZE: 10pt">??? ItemArray:获取或设置行中所有列的值。


<p style="FONT-SIZE: 10pt">??? RowError:返回一个包含行错误信息的字符串。


<p style="FONT-SIZE: 10pt">??? RowState:返回DataRowState枚举中的值来表示行的当前状态。


<p style="FONT-SIZE: 10pt">??? Table:返回DataRow对象所在的DataTable.


<p style="FONT-SIZE: 10pt">??? ②、方法


<p style="FONT-SIZE: 10pt">??? AcceptChanges和RejectChanges:提交和放弃挂起更改。


<p style="FONT-SIZE: 10pt">??? BeginEdit、CancelEdit、EndEdit


<p style="FONT-SIZE: 10pt">??? ClearErrors:清除DataRow中所有的错误。


<p style="FONT-SIZE: 10pt">??? Delete:Delete方法实际上并不从DataRow表的Row集合中删除该DataRow.当调用DataRow对象的Delete方法时,ADO.NET将该行标记为删除,之后调用SqlDataAdapter对象的Update方法来删除其在数据库中对应的行。


<p style="FONT-SIZE: 10pt">??? 如果希望彻底删除DataRow,可以调用Delete方法,接着再调用它的AccepteChanges方法,还可以使用DataRowCollection对象的Remove方法完成相同的任务。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读