知识大全 ADO.NET读书笔记系列

Posted 属性

篇首语:没有知识就不可能对生活作出正确的解释。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ADO.NET读书笔记系列相关的知识,希望对你有一定的参考价值。

ADO.NET读书笔记系列  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  ADO NET概述

  一 NET数据提供程序

   Net框架提供数据提供程序 SQL Client NET Data Provider和Ole DB NET Data Provider 前者专为SQL Server 以及以后的版本的数据库进行通信而设计 后者允许通过OLE DB提供程序与各种数据存储进行通信 无论使用哪种方式 所编写的代码都很相似

  二 对象分类概述

     连接的对象

  Ⅰ Connection对象

  表示与数据源之间的连接 可通过Connection对象的各种不同属性指定数据源的类型 位置以及其他属性 可用它来与数据库建立连接或断开连接 Connection对象起到渠道的作用 其他对象如DataAdapter和Command对象通过它与数据库通信

  Ⅱ Command对象

  表示对数据库的查询 对存储过程的调用或要返回特定表内容的直接请求 可使用Command对象对数据库执行任何一种查询操作

  Ⅲ DataReader对象

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

  Ⅳ Transaction对象

  Connection对象有一个BeginTransaction方法 可用来创建Transaction对象 该对象可用来在    Transaction对象的生存期提交或取消对数据库所做的更改

  Ⅴ Parameter对象

  要使用参数化的Command对象 可先为查询中的每个参数创建Parameter对象 并将它们添加到Command对象的Paramters集合中 ADO NET的Parameter对象公开一些属性和方法 可用来定义参数的数据类型和值

  Ⅵ DataAdapter对象

  DataAdapter对象充当数据库和ADO NET对象模型中断开连接的对象之间的桥梁 DataAdapter对象会填充DataSet对象中的表 而且能读取缓存的更改并将其提交给数据库

     断开连接的对象

  Ⅰ DataTable对象

  DataTable对象允许您通过行和列的集合查看数据 通过DataAdapter对象的Fill方法 可以将查询的结果存储在DataTable中 一旦从数据库中读出了数据 将其存储在DataTable对象中 数据与服务器之间的连接就断开拉

  DataTable类包含了其他断开连接对象的集合 例如 DataRow DataColumn Constraints等

  Ⅱ DataColumn对象

  每个DataTable都有一个Columns集合 该集合是DataColumn对象的容器 DataColumn对象存储了有关列结构的信息

  Ⅲ Constraint对象

  Constraint对象存在于DataTable对象的Constraints集合中 可以建立一个Constraint对象 确保某一列或多个列中的值在DataTable中是惟一的

  Ⅳ DataRow对象

  想要访问存储在DataTable对象中的实际值 可以使用对象的Rows集合 该集合中包含了一组DataRow对象 DataTable通过DataRows的集合使得所有数据行都可以访问 DataRow对象也是更新的起点

  Ⅴ DataSet对象

  可以将DataSet对象视为一些DataTable对象的容器 DataSet对象还有一些属性 可以向文件 内存地址写入 或读出该对象 可以只保存DataSet对象的内容或只保存DataSet对象的结构 也可以两者都保存

  Ⅵ DataRelation对象

  DataSet类定义了一个Realtion属性 该属性是DataRelation对象的一个集合 可以使用DataRelation对象来表明DataSet中不同的DataTable对象之间的关系

  DataRelation对象还引入了一些属性 来强化引用的完整性

  Ⅶ DataView对象

  一旦获取了DataTable对象中查询的结果 就可以使用DataView对象以不同方式来查看数据 可以使用多个DataView对象在同时查看同一DataTable

     强类型DataSet对象

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

  Connection对象

  一 特点介绍

  在ADO NET对象模型中 Connection对象代表了与数据库之间的连接 可以使用Connection对象的属性来指定用户凭据以及数据源的位置

  二 使用介绍

   基本使用

  string strConn= data source = initial catalog =Northwind persist security info=false user id=sa password=

  SqlConnection cn = new SqlConnection(strConn)

  cn Open()

  ……………

  cn Close()

   连接池

  默认情况下使用连接池

  当不想使用时 在Ole DB连接字符串中加入 OLE DB Service=

  在Sql连接字符串中加入 Pooling=false

   与其他对象关系

  Ⅰ 创建Commands

  string strConn= ………

  SqlConnection cn=new SqlConnection(strConn)

  cn Open()

  SqlCommand cmd = cn CreateCommand()

  Ⅱ 启动事务

  string strConn= ………

  SqlConnection cn=new SqlConnection(strConn)

  cn Open()

  SqlTransaction txn = cn BeginTransaction()

  三 属性方法事件介绍

   属性

  ⒈ConnectionString 连接字符串 其中包含源数据库名称和建立初始连接所需的其他参数 默认值为空字符串 只能在Connection未与数据源连接时设置其属性 当连接到数据源时 属性是只读的

  ⒉ConnectionTimeOut 等待连接打开的时间(以秒为单位) 默认值为 秒

  ⒊Database 当前数据库的名称或连接打开后要使用的数据库的名称 默认值为空字符串

  ⒋DataSource 要连接的 SQL Server 实例的名称 默认值为空字符串

  ⒌State ConnectionState值的按位组合 默认值为Closed

  成员名称说明值

  Broken与数据源的连接中断 只有在连接打开之后才可能发生这种情况 可以关闭处于这种状态的连接 然后重新打开

  

  Closed连接处于关闭状态

  

  Connecting连接对象正在与数据源连接

  

  Executing连接对象正在执行命令

  

  Fetching连接对象正在检索数据

  

  Open连接处于打开状态

  

  ⒍ServerVersion SQL Server 实例的版本 版本的格式为 ## ## #### 其中前两位是主版本 中间两位是次版本 最后四位是发布版本 该字符串的格式为 major minor build 其中 major 和 minor 必须为两位数 build 必须为四位数

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

  PacketSize 可以是 和 字节范围内的一个值 如果该值超出了这个范围 就会产生异常

   方法

  ⒈BeginTransaction 开始数据事务

  ⒉ChangeDatabase 在一个打开的连接上更改当前数据库

  ⒊Close 关闭连接

  ⒋CreateCommand 为当前连接创建一个SqlCommand

  ⒌Open 打开连接

   事件

  ⒈InfoMessage 当 SQL Server 返回一个警告或信息性消息时发生

  当 Sql Server 返回严重度等于或小于 的消息时 会激发 InfoMessage 事件 严重度在 和 之间的消息会引发错误 而严重度超过 的消息将导致连接关闭

  ⒉StateChange 当连接状态更改时发生 只要Connection对象的State属性值发生变化 该对象的StateChange事件就会被触发

  SqlDataAdapter对象

  一 特点介绍

   表示用于填充 DataSet 和更新 SQL Server 数据库的一组数据命令和一个数据库连接

   在SqlDataAdapter和DataSet之间没有直接连接 当完成SqlDataAdpater Fill(DataSet)调用后 两个对象之间就没有连接了

  二 使用介绍

   创建SqlDataAdapter

  ……

  string strSQL= Select * from Customers

  SqlCommand cmd=new SqlCommand(strSQL cn)

  SqlDataAdapter da=new SqlDataAdapter()

  da SelectCommand=cmd

   SqlDataAdapter构造函数

  ①string strConn= Provider=……

  string strSQL= select * from Customers

  SqlDataAdapter da=new SqlDataAdapter(strSQL strConn)

  ②string strConn= Provider=……

  SqlConnection cn=new SqlConnection(strConn)

  SqlDataAdapter da=new SqlDataAdapter( select * from Customers cn)

  ③string strConn= Provider=……

  string strSQL= select * from Customers

  SqlConnection cn=new SqlConnection(strConn)

  SqlCommand cmd=new SqlCommand(strSQL cn)

  SqlDataAdapter da=new SqlDataAdapter(cmd)

   从查询中获取结果

  ①使用Fill方法

  ……

  SqlDataAdapter da=new SqlDataAdapter(strSQL strConn)

  DataSet ds=new DataSet()

  da Fill(ds)    //这里ds中的表名为Table

  ②使用Fill方法创建DataTable对象和DataColumn对象

  ……

  SqlDataAdapter da=new SqlDataAdapter(strSQL strConn)

  da TableMapping Add( Table Customers )

  DataSet ds=new DataSet()

  da Fill(ds)

  ③使用重载Fill方法

  SqlDataAdapter Fill(DataSet Customers )

  SqlDataAdapter Fill(DataTable)

  SqlDataAdapter Fill(DataSet intStartRecord intNumRecords TableName )

  ④开放和关闭连接

  如果调用了一个SqlDataAdapter对象的Fill方法 而SelectCommand属性的Connection关闭了 那么SqlDataAdapter就会开放一个连接 然后提交查询 获取结果 最后关闭连接 如果在调用前开放了Connection 那么操作之后仍然保持开放

  ……

  SqlDataAdapter daCustomers daOrders

  daCustomers=new SqlDataAdapter( Select * from Customers cn)

  daOrders=new SqlDataAdapter( Select * from Orders cn)

  DataSet ds=new DataSet()

  cn Open()

  daCustomers Fill(ds)

  daOrders Fill(ds)

  cn Close()

  ⑤多次调用Fill方法

  刷新DataSet中的数据 最简单的解决方法就是清空DataSet(或DataTable) 然后再次调用DataAdapter对象的Fill方法

  三 属性方法事件介绍

   属性

  ①AcceptChangeDuringFill 确定由DataAdapter所获取的行的RowState(默认为True)

  ②DeleteCommand 获取或设置一个 Transact SQL 语句或存储过程 以从数据集删除记录

  ③InsertCommand 获取或设置一个 Transact SQL 语句或存储过程 以在数据源中插入新记录

  ④SelectCommand 获取或设置一个 Transact SQL 语句或存储过程 用于在数据源中选择记录

  ⑤UpdateCommand 获取或设置一个 Transact SQL 语句或存储过程 用于更新数据源中的记录

  ⑥TableMappings SqlDataAdapter用来将查询的结果映射到DataSet的信息集合

  ⑦ContinueUpdate 控制SqlDataAdapter在遇到一个错误之后是否继续提交更改(默认为false)

   方法

  ①Fill 执行存储于SelectCommand中的查询 并将结果存储在DataTable中

  ②FillSchema 为存储在SelectCommand中存储的查询获取架构信息 获取查询中的各列名称和数据类型

  ③GetFillParameters 为SelectCommand获取一个包含着参数的数组

  ④Update 向数据库提交存储在DataSet(或DataTable DataRows)中的更改 该方法会返回一个整数值 其中包含着在数据存储中成功更新的行数

   事件

  ①FillError 当DataAdapter遇到填充DataSet或DataTable的一个错误时 该事件被触发

  ②RowUpdated 向数据库提交一个修改的行之后被触发

  ③RowUpdating 向数据库提交一个修改的行之前被触发

  DataSet对象

  一 特点介绍

   处理脱机数据 在多层应用程序中很有用

   可以在任何时候查看DataSet中任意行的内容 允许修改查询结果的方法

   处理分级数据

   缓存更改

   XML的完整性 DataSet对象和XML文档几乎是可互换的

  二 使用介绍

   创建DataSet对象 DataSet ds = new DataSet( DataSetName )

   查看调用SqlDataAdapter Fill创建的结构

  da Fill(ds Orders )

  DataTable tbl = ds Table[ ]

  foreach(DataColumn col in tbl Columns)

  Console WriteLine(col ColumnName)

   查看SqlDataAdapter返回的数据

  ① DataRow对象

  DataTable tbl = ds Table[ ]

  DataRow row = tbl Row[ ]

  Console WriteLine(ros[ OrderID ])

  ② 检查存储在DataRow中的数据

  DataTable tbl = row Table

  foreach(DataColumn col in tbl Columns)

  Console WriteLine(row[col])

  ③ 检查DatTable中的DataRow对象

  foreach(DataRow row in tbl Rows)

  DisplayRow(row)

   校验DataSet中的数据

  ① 校验DataColumn的属性 ReadOnly AllowDBNull MaxLength Unique

  ② DataTable对象的Constrains集合 UiqueConstraints Primarykey ForeignkeyConstraints

  通常不必刻意去创建ForeignkeyConstraints 因为当在DataSet的两个DataTable对象之间创建关系时会创建一个

  ③ 用SqlDataAdapter Fill模式来检索模式信息

   编写代码创建DataTable对象

  ① 创建DataTable对象 DataTable tbl = new DataTable( TableName )

  ② 将DataTable添加到DataSet对象的Table集合

  DataSet ds = new DataSet()

  DataTable tbl = new DataTable( Customers )

  ds Tables Add(tbl)

  DataSet ds = new DataSet()

  DataTable tbl = ds Tables Add( Customers )

  DataTable对象只能存在于至多一个DataSet对象中 如果希望将DataTable添加到多个DataSet中 就必须使用Copy方法或Clone方法 Copy方法创建一个与原DataTable结构相同并且包含相同行的新DataTable Clone方法创建一个与原DataTable结构相同 但没有包含任何行的新DataTable

  ③ 为DataTable添加列

  DataTable tbl = ds Tables Add( Orders )

  DataColumn col =tbl Columns Add( OrderID typeof(int))

  col AllowDBNull = false

  col MaxLength =

  col Unique = true

  tbl PrimaryKey = new DataColumn[]tbl Columns[ CustomersID ]

  当设置主键时 AllowDBNull自动设置为False

  ④ 处理自动增量列

  DataSet ds = new DataSet()

  DataTable tbl = ds Tables Add( Orders )

  DataColumn col = tbl Columns Add( OrderID typeof(int))

  col AutoIncrement = true

  col AutoIncrementSeed =

  col AutoIncrementStep =

  col ReadOnly = true

  ⑤ 添加基于表达式的列

  tbl Columns Add( ItemTotal typeof(Decimal) Quantity*UnitPrice )

   修改DataTable内容

  ① 添加新DataRow

  DataRow row = ds Tables[ Customers ] NewRow()

  row[ CustomerID ] = ALFKI

  ds Tables[ Customers ] Rows Add(row)

  object[] aValues = ALFKI Alfreds Anders

  da Tables[ Customers ] LoadDataRow(aValues false)

  ② 修改当前行

  修改行的内容逼供内不会自动修改数据库中相应的内容 对行所做的修改被视为是随后将使用SqlDataAdapter对象来提交交给数据库的待定的更改

  DataRow rowCustomer

  rowCustomer = ds Tables[ Custoemrs ] Rows Find( ANTON )

  if(rowCustomer == null)

  //没有查找客户

  else

  

  rowCustomer[ CompanyName ] = NewCompanyName

  rowCustomer[ ContactName ] = NewContactName

  

  //推荐使用这种方式

  DataRow rowCustomer

  rowCustomer = ds Tables[ Custoemrs ] Rows Find( ANTON )

  if(rowCustomer == null)

  //没有查找客户

  else

  

  rowCustomer BeginEdit()

  rowCustomer[ CompanyName ] = NewCompanyName

  rowCustomer[ ContactName ] = NewContactName

  rowCustomer EndEdit()

  

  //null表示不修改该列的数据

  obejct[] aCustomer =null NewCompanyName NewContactName null

  DataRow rowCustomer

  rowCustomer = ds Tables[ Customers ] Rows Find( ALFKI )

  rowCustomer ItemArray = aCustomer

  ③ 处理DataRow的空值

  //查看是否为空

  DataRow rowCustomer

  rowCustomer = ds Tables[ Customers ] Rows Find( ALFKI )

  if(rowCustomer IsNull( Phone ))

  Console WriteLine( It s Null )

  else

  Console WriteLine( It s not Null )

  //赋予空值

  rowCustomer[ Phone ] = DBNull Value

  ④ 删除DataRow

  DataRow rowCustomer

  rowCustomer = ds Tables[ Customers ] Rows Find( ALFKI )

  rowCustomer Delete()

  ⑤ 清除DataRow

  DataRow rowCustomer = ds Tables[ Customers ] Rows Find( ALFKI )

  rowCustomer ItemArray = aCustomer

  da Tables[ Customers ] Remove(rowCustomer)

  或者

  ds Tables[ Customers ] RemoveAt(intIndex)

  ⑥ 使用DataRow RowState属性 Unchanged Detached Added Modified Deleted

  private void DemonstrateRowState()

   // Run a function to create a DataTable with one column DataTable myTable = MakeTable() DataRow myRow

  // Create a new DataRow myRow = myTable NewRow() // Detached row Console WriteLine( New Row + myRow RowState)

  myTable Rows Add(myRow) // New row Console WriteLine( AddRow + myRow RowState)

  myTable AcceptChanges() // Unchanged row Console WriteLine( AcceptChanges + myRow RowState)

  myRow[ FirstName ] = Scott // Modified row Console WriteLine( Modified + myRow RowState)

  myRow Delete() // Deleted row Console WriteLine( Deleted + myRow RowState)

  ⑦ 检查DataRow中的挂起更改

  DataRow rowCustomer

  rowCustomer = ds Tables[ Customers ] Rows Find( ALFKI )

  rowCustomer[ CompanyName ] = NewCompanyName

  string strNewCompanyName strOldCompanyName

  Console WriteLine(rowCustomer[ CompanyName DataRowVersion Current])

  Console WriteLine(rowCustomer[ CompanyName DataRowVersion Original])

  三 属性方法事件介绍

   DataSet

  ① 属性

  CaseSensitive 用于控制DataTable中的字符串比较是否区分大小写

  DataSetName 当前DataSet的名称 如果不指定 则该属性值设置为 NewDataSet 如果将DataSet内容写入XML文件 DataSetName是XML文件的根节点名称

  DesignMode 如果在设计时使用组件中的DataSet DesignMode返回True 否则返回False

  HasErrors 表示DataSet中的DataRow对象是否包含错误 如果将一批更改提交给数据库并将DataAdapter对象的ContinueUpdateOnError属性设置为True 则在提交更改后必须检查DataSet的HasErrors属性 以确定是否有更新失败

  NameSpace和Prefix 指定XML命名空间和前缀

  Relations 返回一个DataRelationCollection对象

  Tables 检查现有的DataTable对象 通过索引访问DataTable有更好的性能

  ② 方法

  AcceptChanges和RejectChanges 接受或放弃DataSet中所有挂起更改 调用AcceptChanges时 RowState属性值为Added或Modified的所有行的RowState属性都将被设置为UnChanged 任何标记为Deleted的DataRow对象将从DataSet中删除 调用RejectChanges时 任何标记为Added的DataRow对象将会被从DataSet中删除 其他修改过的DatRow对象将返回前一状态

  Clear 清除DataSet中所有DataRow对象 该方法比释放一个DataSet然后再创建一个相同结构的新DataSet要快

  Clone和Copy 使用Copy方法会创建与原DataSet具有相同结构和相同行的新DataSet 使用Clone方法会创建具有相同结构的新DataSet 但不包含任何行

  GetChanges 返回与原DataSet对象具有相同结构的新DataSet 并且还包含原DataSet中所有挂起更改的行

  GetXml和GetXmlSchema 使用GetXml方法得到由DataSet的内容与她的架构信息转换为XML格式后的字符串 如果只希望返回架构信息 可以使用GetXmlSchema

  HasChange 表示DataSet中是否包含挂起更改的DataRow对象

  Merge 从另一个DataSet DataTable或现有DataSet中的一组DataRow对象载入数据

  ReadXml和WriteXml 使用ReadXml方法从文件 TextReader 数据流或者XmlReader中将XML数据载入DataSet中

  Reset 将DataSet返回为未初始化状态 如果想放弃现有DataSet并且开始处理新的DataSet 使用Reset方法比创建一个DataSet的新实例好

  ③ 事件

  MergeFailed 在DataSet的Merge方法发生一个异常时触发

   DataTable

  ① 属性

  ② 方法

  ③ 事件

  ColumnChanged 在列的内容被改变之后触发

  ColumnChangding 在列的内容被改变之前触发

  RowChanged RowChanging RowDeleted RowDeleting

   DataColumn

  ① 属性

   DataRow

  ① 属性

  HasError 确定行是否包含错误

  Item 通过指定行的列数 列的名称或DataColumn对象本身 访问列的内容

  ItemArray 获取或设置行中所有列的值

  RowError 返回一个包含行错误信息的字符串

  RowState 返回DataRowState枚举中的值来表示行的当前状态

  Table 返回DataRow对象所在的DataTable

  ② 方法

  AcceptChanges和RejectChanges 提交和放弃挂起更改

  BeginEdit CancelEdit EndEdit

  ClearErrors 清除DataRow中所有的错误

  Delete Delete方法实际上并不从DataRow表的Row集合中删除该DataRow 当调用DataRow对象的Delete方法时 ADO NET将该行标记为删除 之后调用SqlDataAdapter对象的Update方法来删除其在数据库中对应的行

cha138/Article/program/net/201311/12531

相关参考

知识大全 ado.net快速上手实践篇(一)

   这两天重温经典对的东西稍微深入的了解了一下顺便写点代码练练手全当是复习笔记吧  一简单说说的大常用对象   既然说

知识大全 ADO.NET和ADO的比较

ADO.NET和ADO的比较  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 处理ADO与ADO.NET对比介绍

处理ADO与ADO.NET对比介绍  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ADONET统

知识大全 培根随笔读书笔记 300字左右 7篇

培根随笔读书笔记300字左右7篇,求助!培根随笔的读书笔记(200字左右,共需15篇),培根随笔读书笔记300字以上,培根随笔读书笔记300字10篇加评析100字培根论求知求知可以作为消遣,可以作为装

知识大全 求一篇马哲读书笔记。马上要用,谢谢

求一篇马哲读书笔记。马上要用,谢谢!读书笔记指读书时为了把自己的读书心得记录下来或为了把文中的精彩部分整理而做的笔记。在读书时,写读书笔记是训练阅读的好方法。记忆,对于积累知识是重要的,但是不能迷信记

知识大全 在 ADO 和 ADO.NET 中管理离线数据

在ADO和ADO.NET中管理离线数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  您可以使用

知识大全 ADO.Net与ADO在数据内存中的差异讨论

ADO.Net与ADO在数据内存中的差异讨论  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  数据

知识大全 我老师要我写读书笔记,我不知道怎么写,大家帮个忙啊,要6年级的读书笔记。

我老师要我写读书笔记,我不知道怎么写,大家帮个忙啊,要6年级的读书笔记。可以上网找一些关于作者的一些资料,是古诗的话可以找古诗意思和诗人的资料,在书本上找一些自己喜欢的片段并写上感受我老师要我写读书笔

知识大全 读书笔记 范文600字

读书笔记范文600字自己找去读书笔记范文400字特殊的:一、摘录式。读书时,把书报上精彩的、有意义的、富有哲理的语句、重要的片断摘抄下来。摘录时要注意,不能全抄,而要把书中的优美词语按人物类、景物类、

知识大全 《昆虫记》读书笔记

《昆虫记》读书笔记读书笔记《昆虫记》法布尔作者介绍:法布尔,通常称作让-亨利·法布尔,1823年12月22日降生在法国南方阿韦龙省圣雷翁村一户农民家中。法布尔一生酷爱昆虫,不知疲倦地从事独具特色的昆虫