ADO.NET实用经验

ADO.NET框架数据提供程序
.NET.NET框架数据提供程序?
为了使您的应用程序获得最佳性能,请使用最适合您的数据源的.NET框架数据提供程序。有许多数据提供程序可供您的应用程序选用。
 
ODBC.NET 数据提供程序可在Microsoft.Data.ODBC命名空间中找到,它的体系结构与用于 SQLServerOLE DB.NET数据提供程序相同。ODBC .NET数据提供程序遵循命名约定 -以“ODBC”为前缀(例如, OdbcConnection),并使用标准ODBC连接字符串。
当使用DataSet时,经常会利用 DataAdapter(也可能是 CommandBuilder)与数据源进行交互。当使用 DataSet时,也可以利用 DataViewDataSet中的数据应用排序和筛选。也可以从 DataSet继承,创建强类型 DataSet,用于将表、行和列作为强类型对象属性公开。
下列主题包括的信息涉及:使用DataSetDataReader的最佳时机、如何优化访问它们所包含数据、以及如何优化使用 DataAdapter(包括 CommandBuilder)和 DataView的技巧。
DataSetDataSet的好处
DataSet 的另一个好处是可被继承以创建一个强类型DataSet。强类型 DataSet的好处包括设计 时类型检查,以及Microsoft Visual Studio.NET用于强类型 DataSet语句结束所带来的好处。修改了 DataSet的架构或关系结构后,就可以创建一个强类型 DataSet,将行和列作为对象的属性公开,而不是作为集合中的项公开。例如,不公开客户表中行的姓名列,而公开Customer对象的 Name属性。类型化 DataSetDataSet类派生,因此不会牺牲 DataSet的任何功能。也就是说,类型化 DataSet仍能远程访问,并作为数据绑定控件(例如 DataGrid)的数据源提供。如果架构事先不可知,仍能受益于通用 DataSet的功能,但却不能受益于强类型 DataSet的附加功能。
如果想用服务器上的更新值刷新DataSet中的值,就使用 DataAdapter.Fill。如果有在 DataTable上定义的主键, DataAdapter.Fill会根据主键进行新行匹配,并且当更改到现有行时应用服务器上的值。即使刷新之前修改了这些数据,刷新行的 RowState仍被设置为 Unchanged。注意,如果没有为 DataTable定义主键, DataAdapter.Fill就用可能重复的主键值添加新行。
如果想用来自服务器的当前值刷新表,并同时保留对表中的行所做的任何更改,必须首先用DataAdapter.Fill填充表,并填充一个新的 DataTable,然后用 preserveChangestrueDataTable合并到 DataSet之中。
如果创建了DataView,并且修改了 SortRowFilterRowStateFilter属性, DataView就会为基础 DataTable中的数据建立索引。创建 DataView对象时,要使用 DataView构造函数,它用 SortRowFilterRowStateFilter值作为构造函数参数(与基础 DataTable一起)。结果是创建了一次索引。创建一个“空” DataView并随后设置 SortRowFilterRowStateFilter属性,会导致索引至少创建两次。
ADO.NET startRecordmaxRecords值的 DataAdapter.Fill重载。当以这种方式填充 DataSet时,只有 maxRecords参数(从 startRecord参数标识的记录开始)指定的记录数量用于填充 DataSet,但无论如何总是返回完整的查询。这就会引起不必要的处理,用于读取“不需要的”记录;而且为了返回附加记录,会耗尽不必要的服务器资源。
2) SQL语句,将TOP谓词和嵌入式 SELECT语句的使用结合在一起。此技术并不依赖于存在一种可唯一标识每一行的办法。使用这项技术的第一步是将所需页的数量与 页大小相乘。然后将结果传递给SQL Query的 TOP谓词,该查询以升序排列。再将此查询嵌入到另一个查询中,后者从降序排列的嵌入式查询结果中选择TOP页大小。实质上,返回的是嵌入式查询的最后一页。例如,要返回查询结果的第三页( 页大小是10),应该书写如下所示的命令:
SELECT TOP 10 * FROM (SELECT TOP 30 * FROMCustomers ORDER BY Id ASC) AS Table1 ORDER BY Id DESC
1) DataSet
当用数据填充DataSet时, DataAdapter.Fill方法使用 DataSet的现有架构,并使用从 SelectCommand返回的数据填充它。如果在 DataSet中没有表名与要被填充的表名相匹配,Fill方法就会创建一个表。默认情况下, Fill仅定义列和列类型。
通过设置DataAdapterMissingSchemaAction属性,可以重写 Fill的默认行为。例如,要让Fill创建一个表架构,并且还包括主键信息、唯一约束、列属性、是否允许为空、最大列长度、只读列和自动增量的列,就要将 DataAdapter.MissingSchemaAction指定为 MissingSchemaAction.AddWithKey。或者,在调用 DataAdapter.Fill前,可以调用 DataAdapter.FillSchema来确保当填充 DataSet时架构已到位。
FillSchema的调用会产生一个到服务器的额外行程,用于检索附加架构信息。为了获得最佳性能,需要在调用Fill之前指定 DataSet的架构,或者设置 DataAdapterMissingSchemaAction
下面是一些使用DataReader获得最佳性能的技巧,同时还回答了一些关于使用 DataReader的常见问题。
 1) 在访问相关 Command的任何输出参数之前,必须关闭 DataReader
 2) 完成读数 据之后总是要关闭 DataReader。如果使用 Connection只是用于返回 DataReader,那么关闭 DataReader之后立刻关闭它。
 另外一个显式关闭Connection的方法是将 CommandBehavior.CloseConnection传递给 ExecuteReader方法,以确保相关的连接在关闭 DataReader时被关闭。如果从一个方法返回 DataReader,而且不能控制 DataReader或相关连接的关闭,则这样做特别有用。
 1) 不能在层之间远程访问 DataReaderDataReader是为已连接好的数据访问设计的。
 2) 当访问列数据时,使用类型 化访问器,例如, GetStringGetInt32等。这使您不用进行将 GetValue返回的 Object强制转换成特定类型所需的处理。
 3) 一个单一连接每次只能打开一个 DataReader。在ADO中,如果打开一个单一连接,并且请求两个使用只进、只读游标的记录集,那么 ADO会在游标生存期内隐式打开第二个、未池化的到数据存储区的连接,然后再隐式关闭该连接。对于 ADO.NET,“秘密”完成的动作很少。如果想在相同的数据存储区上同时打开两个 DataReaders,就必须显 式创建两个连接,每个 DataReader一个。这是 ADO.NET为池化连接的使用提供更多控制的一种方法。
 4) 默认情况下, DataReader每次Read时都要将整行加载到内存。这允许在当前行内随机访问列。如果不需要这种随机访问,为了提高性能,就将 CommandBehavior.SequentialAccess传递给 ExecuteReader调用。这将 DataReader的默认行为更改为仅在请求时将数据加载到内存。注意, CommandBehavior.SequentialAccess要求顺序访问返回的列。也就是说,一旦读过返回的列,就不能再读它的值了。
 5) 如果已经完成读取来自 DataReader的数据,但仍然有大量挂起的未读结果,就在调用 DataReaderClose之前先调用Command的 Cancel。调用 DataReaderClose会导致在关闭游标之前检索挂起的结果并清空流。调用Command的 Cancel会放弃服务器上的结果,这样, DataReader在关闭的时候就不必读这些结果。如果要从Command返回输出参数,还要调用 Cancel放弃它们。如果需要读取任何输出参数,不要调用Command的 Cancel,只要调用 DataReaderClose即可。
<SPANSTYLE='FONT-SIZE:12.0PT;"done">大对象(BLOB)
DataReader检索二进制 大对象(BLOB)时,应该将 CommandBehavior.SequentialAccess传递给 ExecuteReader方法调用。因为 DataReader的默认行为是每次 Read都将整行加载到内存,又因为BLOB值可能非常大,所以结果可能由于单个 BLOB而使大量内存被用光。 SequentialAccessDataReader的行为设置为只加载请求的数据。然后还可以使用 GetBytesGetChars控制每次加载多少数据。
记住,使用SequentialAccess时,不能不按顺序访问 DataReader返回的不同字段。也就是说,如果查询返回三列,其中第三列是BLOB,并且想访问前两列中的数据,就必须在访问 BLOB数据之前先访问第一列的值,然后访问第二列的值。这是因为现在数据是顺序返回的,并且 DataReader一旦读过该数据,该数据就不再可用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


本篇内容主要讲解“sqlalchemy的常用数据类型怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“sqlalche...
今天小编给大家分享一下sqlServer实现分页查询的方式有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家
这篇文章主要介绍“sqlmap之osshell怎么使用”,在日常操作中,相信很多人在sqlmap之osshell怎么使用问题上存在疑惑,小编查阅了各式资料,整理出
本篇内容介绍了“SQL注入的知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧...
1. mssql权限sa权限:数据库操作,文件管理,命令执行,注册表读取等system。是mssql的最高权限db权限:文件管理,数据库操作等 users-administratorspublic权限:数据库操作 guest-users2、sql server注入执行命令查
sql执行计划如何查看?在SPL庞大的数据中我们不知道如何查看实际数据库中发生了什么事情,有必要定期进行查询优化和索引否则会影响我们后期的SQL的查询速度。那么针对这样的问题我们必须要知道SQL执行的计划,在本文中winwin7小编给大家分享下SQL执
SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点应用非常广泛。不过在使用中,我们会遇到非常多的错误,面对这么庞大的数据库环境,当然会有精确的错误代码的对照季,下面小编分享的
SQL Server本地账户无法登陆出现错误提示:error:40-Could not open a connenction to SQL Server的问题很常见,对于初学者来说可能不知道如何解决,一起来看看下面的解决方案。解决步骤如下:1、这种情况需要开启 SQL Server service
微软推出的SQL2008是一款非常好用的数据库软件,它稳定、功能强大,为众多企业提供了最佳的数据库解决方案,那么我们如何在Windows中安装它呢,一些朋友对SQL Server 2008的安装过程还不是很熟悉,下面就一起来看看SQL Server 2008详细安装图解...
本页概要如果您使用的是 SQL Server 2005备份和还原Sp_detach_db 和 Sp_attach_db 存储过程关于排序规则的说明导入和导出数据(在 SQL Server 数据库之间复
DBCC CHECKIDENT 检查指定表的当前标识值,如有必要,还对标识值进行更正。 语法 DBCC CHECKIDENT ( &#39;table_name&#39; [ , { NORESEED
这里对 SQL Server 字符串函数进行分门别类地列出,便于查阅和记忆,相信大家都在其它方面有高深的编程基础,从字面上来说大家都知道这些函数的意义,就不对这些函数作过多的解释了,主要谈些经验,具体
查询及删除重复记录的方法 1、查找表(people)中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select*frompeoplewherepeopleIdin(selectpe
微软发SQL Server 2008第二个CTP预览版from: http://news.csdn.net/n/20070807/107158.html8月7日消息,微软公司本周发布了SQL Serv
症状当您将数据库备份恢复到另一台服务器时,可能会遇到孤立用户的问题。SQL Server 联机丛书中的孤立用户疑难解答主题中没有讲述解决此问题的具体步骤。本文介绍了如何解决孤立用户问题。更多信息虽然术
当登录SQL Server 2005时可能碰到错误: &#39;No Process is on the Other End of the Pipe&#39;。解决方法:(1)Open up SQL
概要本文描述如何映射标准登录和集成登录来解决在运行 SQL Server 的服务器之间移动数据库时的权限问题。更多信息当您将数据库从一个运行 SQL Server 的服务器移到另一个运行 SQL Se
----------------------------------------问题:该用户与可信的SQL SERVER 连接无关联使用sa用户或自建用户使用“SQL SERVER 身份认证”连接数据
更新日期: 2007 年 5 月 20 日 使用下表可以确定各种版本的 Microsoft SQL Server 2005 支持哪些功能。有关 SQL Server 2005 Enterprise E
当从Excel导入数据到Sql Sever中,可能会出现以下问题:&#xD;&#xA;对于指定的缓冲区大小而言,源列的数据太大