知识大全 使用Command 和DataReader对象加速访问

Posted

篇首语:初心不与年俱老,奋斗永似少年时。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 使用Command 和DataReader对象加速访问相关的知识,希望对你有一定的参考价值。

使用Command 和DataReader对象加速访问  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  用SqlClient的Command 和DataReader对象代替ADODB能极大地提高性能     当开发人员用现有的VB 代码测试Visual Studio NET的发行版时 Visual Basic Upgrade Wizard会超时 该Wizard并不是全能的 但我发现它很适合升级复杂程度适度 数据驱动的VB 客户端和中间层组件 如果你在VB 代码中指定缺省对象属性——如txtWhatever Text和Recordset Fields(n) Value 那么创建Wizard生成的Visual Basic NET代码所需做的修改就相当少了     当Wizard遇到数据访问代码 它就会跳过去 客户端应用程序或组件最后形成一个ADODB x 参照原来的MDAC版本 数据访问代码保持不变 除了IsNull由IsDbNull代替 这时 你可能会产生这样的实际想法 如果升级的版本可以用 为什么还要修改它?    这就是给SQL Server 用户的回答 将ADODB Connection Command和Recordset对象移植成ADO NET中SqlClient相当的轻量级的对象 会加速你的数据密集的前端 中间层组件和ASP NET XML Web services 我迄今所做的测试表明 从ADODB移植到SqlClient 你可以期望有 %或更高的性能增益     对SQL Server 和 来说 NET Framework的System Data SqlClient名字空间代表了 NET Data Provider(原来的 managed provider ) SqlClient通过与SQL Server以其本地的Tabular Data Stream (TDS) 格式直接通讯 去掉了ADODB和OLE DB SqlConnection和SqlCommand对象相当于ADODB Connection和ADODB Command 对象 并有类似的——但并不是同样的——属性和方法 SqlDataReader对象为只能向前的 只读的(firehose) ADODB Recordsets提供了一个高性能的替代品 你用SqlDataAdapter填充DataSets中的分离的DataTables 微软把这四个Sql…对象称为 NET Data provider的 核心元素     为了做前/后性能比较 我对我的样例OakLeaf Consumer Electronics Windows form 客户端 (OCE Client 见图 )及其四个ASP NET XML Web services做了升级 从ADO/OLE DB 转换到ASP NET的SqlClient provider 这花了我约一天的时间(包括初始测试) 通过点击OakLeaf Web site中的OCE Client链接 你可以测试OCE Client的ASP NET版本 并对Windows form版本和它所使用的ASP NET XML Web services有更多了解     从ADODB转到SqlClient对象的第一步就是在你的Class声明前 增加一个Imports System Data SqlClient的声明 将cnnName= New ADODB Connection改成cnnName = New SqlConnection 从连接字符串中去掉Provider = SQLOLEDB SqlConnection指定了SqlClient provider 最后 用Open( )方法打开连接 下面是OmegaBank VerifyOrHold Web 方法(见列表 )中的一段例子   Dim cnnVerify As New SqlConnection()  strNetConn = Data Source= & strServer & ;Initial  Catalog=OMB_Neork;UID= & strUser & ;PWD= & strPwd  cnnVerify ConnectionString = strNetConn  cnnVerify Open()    你不能直接在一个SqlConnection对象上打开ADODB Recordset的SqlClient相当对象 作为替代 你可以在打开的SqlConnection上创建一个SqlCommand对象 如下例 strSQL = SELECT COUNT(MerchantID) FROM Merchants & _   WHERE MerchantID = & CStr(lngMerchantID)  Dim cmmVerify As SqlCommand = cnnVerify CreateCommand   With cmmVerify  CommandType = CommandType Text  CommandText = strSQL  If CInt( ExecuteScalar()) = Then   Not found  End If   End With     作为选择 你可以将一个打开的SqlConnection对象赋值到一个新的SqlCommand Connection属性 如下例 Dim cmmVerify As New SqlCommand  Dim rdrVerify As SqlDataReader   With cmmVerify   Connection = cnnVerify  CommandType = CommandType Text  CommandText = strSQL  rdrVerify = ExecuteReader()   End With     这些例子说明了三个SqlCommand Execute…方法的两个 ExecuteScalar返回行集合的第一(通常是唯一的)行的第一列的值 ExecuteReader返回一个SqlDataReader对象 每用一次Read方法 该对象返回一列 两种方法都是快速的 并消耗最少的资源 在你用Close方法前 SqlDataReader需要专用相关的SQL Server连接 第三个SqlCommand方法是ExecuteNonQuery 它不返回数据     SqlDataReader对象的行为与XmlReader和TextReader对象很像 读取器在相当于ADODB Recordset的BOF位置启动 如果有另一个记录需要读 Read方法返回True 你在一个While sdrReader Read() End While的回路中来回读取数据 用sdrReader GetDataType (intColumn)方法得到你指定的本地 NET数据类型中的列的数据     新的SqlTransaction对象代替了ADODB Connection对象的CommitTrans CommitTrans和RollbackTrans 方法 作为替代 你声明一个SqlTransaction对象 通过调用SqlConnection BeginTransaction方法创建它 下面是摘自OmegaBank ChargeOrCredit Web方法的一个简单的SqlTransaction代码(见列表 ) Dim cmmCharge As [New] SqlCommand  Dim trnCharge As SqlTransaction   With cmmCharge    Instantiate the SqlTransaction object    trnCharge = cnnCharge BeginTransaction    strSQL = INSERT UPDATE or DELETE statement     Assign the SqlTransaction object to the     SqlCommand object    Transaction = trnCharge    CommandText = strSQL    lngReccnt = ExecuteNonQuery    If lngReccnt < > Then Or some other test      Error so roll back     trnCharge Rollback()    End If    curTransactAmt = curTransactAmt    strSQL = _      Another INSERT UPDATE or DELETE statement     CommandText = strSQL    lngReccnt = ExecuteNonQuery    If lngReccnt = Then Or yet another test      Success so mit     trnCharge Commit()    Else     trnCharge Rollback()    End If   End With     SqlTransaction对象的一个附加的优点是它支持部分返回操作用的T SQL指定的交易保存点     表 显示增加 个定单到OakLeaf Consumer Electronics应用程序样例的六个数据库所需的平均秒数 两个 Local 配置(单一的服务器)和第一个 Remote 配置测量了将客户端和组件或者XML Web services从ADO/OLE DB移植到SqlClient性能方面的改进 Remote XML Web services运行在另一个服务器上 该服务器通过一个 Mpbs的LAN与客户机相连 service upgrades only 配置只测量移植XML Web services的好处 这两个测试都用升级的OCE Client测试工具     的确 你的得数会不同 但是 你可以打赌 通过转换成SqlClient对象 你的数据密集的客户端 组件和XML Web services将会得到 %到 %的性能增益 另外 你排除了对微软遗留的组件的依赖 如果SQL Server是你的目标数据库 SqlClient就是应该用的 NET方式 cha138/Article/program/net/201311/12801

相关参考

知识大全 C#中DataReader类的使用

C#中DataReader类的使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!    using

知识大全 ADO.NET详细研究 -- DataReader终结篇

ADO.NET详细研究--DataReader终结篇  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 Java执行Shell&Command

Java执行Shell&Command  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  主要使用R

知识大全 Java设计模式-----Command模式

Java设计模式-----Command模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  源自

知识大全 Java设计模式之Command 模式

Java设计模式之Command模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Comman

知识大全 java设计模式之Command(菜单命令)

java设计模式之Command(菜单命令)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Co

知识大全 怎样用SQL 2000 生成XML

怎样用SQL2000生成XML  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Command对象

知识大全 ASP存储过程的使用方法

ASP存储过程的使用方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一使用Command对象

随遇而安寿自长—访百岁寿星朱粉英

家住上海卢湾区的朱粉英老人今年已有103岁的高龄,虽说随着年龄的增长,耳朵有点背,眼也有点花,但看上去仍然是那么的精神,仿佛90来岁的模样。那么朱老太的养生之道又是什么?日前,笔者来到老人的家中,走访

知识大全 “查看”和“察看”有什么区别

“查看”和“察看”有什么区别查:考察:检~。调~。~验。~访。~阅。察:仔细看,调查研究:~看。~核。观~。考~。~觉。~访。~勘。~探。明~秋毫(“秋毫”指秋天鸟兽身上新长的细毛,喻为人精明,任何小