《DAT数据访问模式SQLServer和ADONET集成》由会员分享,可在线阅读,更多相关《DAT数据访问模式SQLServer和ADONET集成(22页珍藏版)》请在金锄头文库上搜索。
1、DAT322DAT322 数据访问模式数据访问模式- SQL Server 2005SQL Server 2005和和ADO.NET ADO.NET 2.02.0集成以及新特性揭秘集成以及新特性揭秘 程强程强 微软顾问服务部微软顾问服务部( (华南华南) ) 微软微软( (中国中国) )有限公司有限公司 课程目标和主题课程目标和主题 课程的目标课程的目标 带你快速浏览带你快速浏览SQL Server 2005SQL Server 2005中数据存取中数据存取 技术技术 深入讨论一些深入讨论一些SQL Server 2005SQL Server 2005和和.NET 2.0.NET 2.0 集成
2、的特色功能集成的特色功能 课程的主题课程的主题 这是一个和这是一个和MS Office 12/VistaMS Office 12/Vista无关的课程无关的课程 在设计上你会发现在设计上你会发现SQL ServerSQL Server和和.NET 2.0.NET 2.0有有 非常好的集成,同时也有许多竞争优势非常好的集成,同时也有许多竞争优势 学习这些新特性并了解何时何地在怎样的场景学习这些新特性并了解何时何地在怎样的场景 中使用这些特性中使用这些特性 日程日程 SQL Server 2005SQL Server 2005中的数据访问技术中的数据访问技术 ADO.NET ADO.NET 的数据
3、访问的数据访问APIAPI 深入了解深入了解SQL Server 2005 + .NET 2.0SQL Server 2005 + .NET 2.0 竞争优势竞争优势 数据变化通知数据变化通知/ /SqlDependencySqlDependency 多活动结果集多活动结果集( (MMultiple ultiple A Active ctive RResultSetsesultSets ) ) Transparent failoverTransparent failover 其他的一些其他的一些 COOL COOL 的特性的特性 总结总结 Server 2005Server 2005中的数据访
4、问技术中的数据访问技术 Native applicationsNative applications SQL Native ClientSQL Native Client 包括一个新的包括一个新的 OLEDBOLEDB, , ODBC ODBC 和和 JDBCJDBC providers for SQL Server 2005providers for SQL Server 2005 这次发表不包括一个新版本的这次发表不包括一个新版本的 MDAC (2.8 sp1) MDAC (2.8 sp1) .NET applications.NET applications ADO.NET 2.0ADO
5、.NET 2.0 包含在包含在.NET 2.0.NET 2.0 老的客户端老的客户端 之前所有版本的之前所有版本的 MDACMDAC 仍然完全支持仍然完全支持 之前所有之前所有.NET.NET 版本仍然完全支持版本仍然完全支持 ADO.NET ADO.NET 统领的数据访问统领的数据访问APIAPI ADO.NETADO.NET 是一个针对托管是一个针对托管( (ManagedManaged) ) 应用程序的数据访问应用程序的数据访问 APIAPI 设计理念设计理念 简单直接的访问方式简单直接的访问方式 常用的核心常用的核心APIAPI,加上数据库端规范扩展的数,加上数据库端规范扩展的数 据访
6、问据访问APIAPI 核心元素核心元素 基于连接的技术框架基于连接的技术框架 提供和数据源如何交谈的一切方法和功能提供和数据源如何交谈的一切方法和功能 基于断开连接的技术框架基于断开连接的技术框架 DataSetDataSet 提供本地关系型的数据缓存提供本地关系型的数据缓存( (CacheCache) ) SQL Server + ADO.NETSQL Server + ADO.NET 竞争优势竞争优势 独特功能独特功能 SQLCLRSQLCLR 集成数据访问支持集成数据访问支持 快速批量增加数据快速批量增加数据 SqlBulkCopySqlBulkCopy 缓存和数据变更通知缓存和数据变更
7、通知 SqlDependencySqlDependency 异步命令执行异步命令执行 大批量更新和分页技术大批量更新和分页技术 Transparent failoverTransparent failover 在在ADO.NETADO.NET访问访问SQL ServerSQL Server自定义类型自定义类型 可提升事务优化可提升事务优化 Promotable Promotable transactions)transactions) and moreand more 本质上本质上: : SqlDependencySqlDependency 服务端的特服务端的特性: : 非常类似查询服务代理非
8、常类似查询服务代理 当执行查询时会发出一个当执行查询时会发出一个“ “notificationnotification” ”的请的请 求求 为以后的通知表示一个目标的查询服务代理为以后的通知表示一个目标的查询服务代理 但更新发生并导致结果进行了更改,这一个通但更新发生并导致结果进行了更改,这一个通 知消息被回传发出知消息被回传发出 从客户端来看从客户端来看: : SqlNotificationRequestSqlNotificationRequest 发出了一个通知请求发出了一个通知请求 针对这个通知请求进行轮询针对这个通知请求进行轮询(Polling)(Polling) 本质上本质上: :
9、SqlDependencySqlDependency 客户端的要点客户端的要点 : : “ “SqlDependencySqlDependency” ” 关注查询关注查询/ /服务的管理服务的管理 关注从服务端进行接受关注从服务端进行接受 Share “listeners” across an entire processShare “listeners” across an entire process 从用户的观点来看从用户的观点来看, ,它是一个事件它是一个事件( (eventevent) ) 使用它之前调用使用它之前调用 SqlDependency.Start()SqlDependen
10、cy.Start() 应用场景应用场景: : 数据缓存使用数据缓存使用 SqlDependencySqlDependency ASP.NETASP.NET的内容缓存的内容缓存 本质上本质上: : SqlDependencySqlDependency 带来的好处带来的好处 服务器只处理那些有了订阅的变更服务器只处理那些有了订阅的变更 为了接受变化通知为了接受变化通知SqlDependencySqlDependency保留一个保留一个 等待等待( (PendingPending) )的接收的接收 在在SQL ServerSQL Server只阻塞了一个线程只阻塞了一个线程 我们可以共享监听者我们可
11、以共享监听者 每个唯一的连接字符串每个唯一的连接字符串, ,每个每个NTNT用户用户 Binding can get tricky if mixing many Binding can get tricky if mixing many listenerslisteners 不是为桌面应用进行设计的不是为桌面应用进行设计的, ,扩展和提升的好处是扩展和提升的好处是 针对中间层场景的针对中间层场景的 Scale-outScale-out 策略策略: : 使用使用 SQL Server ExpressSQL Server Express 本质上本质上: MARS: MARS 限制在一个记录集或结果
12、集是有相当局限限制在一个记录集或结果集是有相当局限 的的 从竞争对手的角度来看,需要支持从竞争对手的角度来看,需要支持 MARS: multiple active result-setsMARS: multiple active result-sets 限制是必须使用限制是必须使用SQL Server 2005SQL Server 2005 和新的客和新的客 户端户端( (SQL Native Client or .NET 2.0SQL Native Client or .NET 2.0) ) 现在一个数据库连接上,你可以有多个活动的现在一个数据库连接上,你可以有多个活动的 记录集记录集/ /
13、结果集结果集 简化隔行的数据读取简化隔行的数据读取( (FetchingFetching) ) 隔行的隔行的 DML DML语句和结果能够执行和获得结果语句和结果能够执行和获得结果 本质上本质上: MARS: MARS 打开打开 MARSMARS开关开关 MARSMARS 功能缺省在所有的客户端是关闭的功能缺省在所有的客户端是关闭的 ADO.NET:ADO.NET: 在连接字符串中设置在连接字符串中设置 “ “MultipleActiveResultSets=trueMultipleActiveResultSets=true” ” 在在ADO.NETADO.NET中使用中使用MARSMARS
14、不用改变不用改变API,API,可以在相同的数据连接上使用多可以在相同的数据连接上使用多 个个SqlDataReaderSqlDataReader 场景场景 Interleave reads with DMLInterleave reads with DML 某些情况下它能够避免使用光标某些情况下它能够避免使用光标 本质上本质上: MARS: MARS 获得的好处获得的好处 SQL ServerSQL Server 能够通过同一个数据库连接隔能够通过同一个数据库连接隔 行执行多个请求行执行多个请求 如果并行行为是必须的,那么使用分隔的数据库连如果并行行为是必须的,那么使用分隔的数据库连 接接
15、隔行扫描或动作变成一种不明显的动作隔行扫描或动作变成一种不明显的动作 To stay on the safe side:To stay on the safe side: Have as many as single-statement “SELECT” Have as many as single-statement “SELECT” statements active as neededstatements active as needed Only interleave 1 multi-statement batchOnly interleave 1 multi-statement batch 避免隔行扫描或执行和状态避免隔行扫描或执行和状态( (SessionSession) )相关的操作相关的操作 事务事务( (TransactionsTransactio