惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - epan

www.smallsocial.com - epan 一晃眼这个blog已经丢弃两年。。。 自动调节img宽度的脚本 寻找开源的P2P视频点播系统 为什么vs2005内置Web application server中调用COM组件时正常,在IIS中运行时组件创建失败? 请教vs2005中单元测试时测试一个返回对象的方法应该怎么做? - epan - 博客园 XML节点存在namespace(xmlns)的时候xpath不能正常工作 用ASP.NET缓存提高站点性能【转载】 ADO.NET实用经验无保留曝光 (四)【转载】 ADO.NET实用经验无保留曝光 (三)【转载】 ADO.NET实用经验无保留曝光 (二)【转载】 使用MasterPage遇到的问题 - epan - 博客园 在VS.NET2003中无法新建C#项 最近迷上了淘宝,好像真的有免费的午餐一样。。。 Where to go??? 《鬼谷子》 鬼谷子本经阴符七术 《老子》 我又做了一件不可思议的事。。。
ADO.NET实用经验无保留曝光(一)【转载】
epan · 2006-07-08 · via 博客园 - epan

ADO.NET作为微软最实用的数据访问技术,已经在企业开发中得到了广泛的应用。对于一线的开发人员来说,掌握基本的概念和技术之后,提高应用水平和解决实际问题的最有效手段,莫过于相互交流彼此的最佳时间经验经验。在这篇文章中,两位ADO.NET专家向读者毫无保留地、详尽地介绍了很多实用经验。

  简介

  本文为您提供了在Microsoft ADO.NET应用程序中实现和获得最佳性能、可伸缩性以及功能的最佳解决方案;同时也讲述了使用ADO.NET中可用对象的

最佳实践;并提出一些有助于优化ADO.NET应用程序设计的建议。

  .NET框架数据提供程序

  .NET框架中的数据提供程序(Data Provider)在应用程序和数据源之间起到桥梁作用。.NET框架数据提供程序能够从数据源中返回查询结果、对数据源执行命令、将DataSet中的更改传播给数据源。本文包括有关哪个.NET框架数据提供程序是最适合您需要的一些技巧。

  使用哪个.NET框架数据提供程序?

  为了使您的应用程序获得最佳性能,请使用最适合您的数据源的.NET框架数据提供程序。有许多数据提供程序可供您的应用程序选用。

  连接到SQL Server

7.0或更高版本

  为了在连接到Microsoft SQL Server 7.0或更高版本时获得最佳性能,请使用SQL Server .NET数据提供程序。SQL Server .NET数据提供程序的设计目的就在于不通过任何附加技术层就可以直接访问SQL Server。

  连接到ODBC数据源

  ODBC .NET数据提供程序可在Microsoft.Data.ODBC命名空间中找到,它的体系结构与用于SQL Server和OLE DB的.NET数据提供程序相同。ODBC .NET数据提供程序遵循命名约定-以“ODBC”为前缀(例如,OdbcConnection),并使用标准ODBC连接字符串。

  使用DataReader、DataSet、DataAdapter和DataView

  ADO.NET提供以下两个对象,用于检索关系数据并将其存储在内存中:DataSet和DataReader。DataSet提供一个内存中数据的关系表示形式,一整

套包括一些表在内的数据(这些表包含数据、对数据进行排序并约束数据),以及表之间的关系。DataReader提供一个来自数据库的快速、仅向前、只读数据流。

  当使用DataSet时,经常会利用DataAdapter(也可能是CommandBuilder)与数据源进行交互。当使用DataSet时,也可以利用DataView对DataSet中的数据应用排序和筛选。也可以从DataSet继承,创建强类型DataSet,用于将表、行和列作为强类型对象属性公开。

  下列主题包括的信息涉及:使用DataSet或DataReader的最佳时机、如何优化访问它们所包含数据、以及如何优化使用DataAdapter(包括CommandBuilder)和DataView的技巧。

  DataSet与DataReader

  当设计应用程序时,要考虑应用程序所需功能的等级,以确定使用DataSet或者是DataReader。

  要通过应用程序执行以下操作,就要使用DataSet:

  1) 在结果的多个离散表之间进行导航。
  [转自:51item.net]  
  2) 操作来自多个数据源(例如,来自多个数据库、一个XML文件和一个电子表格的混合数据)的数据。

  3) 在各层之间交换数据或使用XML Web服务。与DataReader不同的是,DataSet能传递给远程客户端。

  4) 重用同样的记录集合,以便通过缓存获得性能改善(例如排序、搜索或筛选数据)。

  5) 每条记录都需要执行大量处理。对使用DataReader返回的每一行进行扩展处理会延长服务于DataReader的连接的必要时间,这影响了性能。

  6) 使用XML操作对数据进行操作,例如可扩展样式表语言转换(XSLT转换)或XPath查询。

  对于下列情况,要在应用程序中使用DataReader:

  1) 不需要缓存数据。

  2) 要处理的结果集太大,内存中放不下。

  3) 一旦需要以仅向前、只读方式快速访问数据。

  注填充DataSet时,DataAdapter使用DataReader。因此,使用DataAdapter

取代DataSet提升的性能表现为节省了DataSet占用内存和填充DataSet需要的循环。一般来说,此性能提升只是象征性的,因此,设计决策应以所需功能为基础。

  使用强类型DataSet的好处

  DataSet的另一个好处是可被继承以创建一个强类型DataSet。强类型DataSet的好处包括设计时类型检查,以及Microsoft

Visual Studio.NET用于强类型DataSet语句结束所带来的好处。修改了DataSet的架构或关系结构后,就可以创建一个强类型DataSet,将行和列作为对象的属性公开,而不是作为集合中的项公开。例如,不公开客户表中行的姓名列,而公开Customer对象的Name属性。类型化DataSet从DataSet类派生,因此不会牺牲DataSet的任何功能。也就是说,类型化DataSet仍能远程访问,并作为数据绑定控件(例如DataGrid)的数据源提供。如果架构事先不可知,仍能受益于通用DataSet的功能,但却不能受益于强类型DataSet的附加功能。

  处理强类型DataSet中的空引用

  使用强类型DataSet时,可以使用DataSet的XML架构定义语言(XSD)架构来确保强类型DataSet可以正确处理空引用。nullValue标识符使您可用一个指定的值String.Empty代替DBNull、保留空引用或引发异常。选择哪个选项取决于应用程序的上下文。默认情况下,如果遇到空引用,就会引发异常。

  刷新DataSet中的数据

  如果想用服务器上的更新值刷新DataSet中的值,就使用DataAdapter.Fill。如果有在DataTable上定义的主键,DataAdapter.Fill会根据主键进行新行匹配,并且当更改到现有行时应用服务器上的值。即使刷新之前修改了这些数据,刷新行的RowState仍被设置为Unchanged。注意,如果没有为DataTable定义主键,DataAdapter.Fill就用可能重复的主键值添加新行。

  如果想用来自服务器的当前值刷新表,并同时保留对表中的行所做的任何更改,必须首先用DataAdapter.Fill填充表,并填充一个新的DataTable,然后用preserveChanges值true将DataTable合并到DataSet之中。