使用ADO.NET2.0提升数据交互性能

掌握ADO.NET 2.0的关键特性和最佳实践 本文深入探讨了ADO.NET 2.0新增的特性及其背后的原理,如手动设置DataRow的RowState、DataView与DataTable的转换、二进制序列化DataSets以及索引引擎的改进等。通过具体示例和深入分析,揭示了如何在实际应用中提高数据处理的性能和效率。 阅读详情

 1使用多数据结果集(仅限2005)
   SQL Server 2005提供了在同一条连接上可以同时传递多个没有游标结构(cursorless)的结果集(也称为默认结果集),此功能称为 Multiple Active Resultsets(MARS)。如此可以节省需要同时打开的连接数,但要注意的是连接字符串设置要加上 MultipleAct-iveResultSets=true 属性,否则默认不启动多数据结果集的功能。

  

string  connstr  =   " server=(local);database=northwind;integrated security=true;  " ; SqlConnection conn  =   new  SqlConnection(connstr); conn.Open(); SqlCommand cmd1  =   new  SqlCommand( " select * from customers " , conn); SqlCommand cmd2  =   new  SqlCommand( " select * from orders " , conn); SqlDataReader rdr1  =  cmd1.ExecuteReader();  //  next statement causes an error prior to SQL Server 2005 SqlDataReader rdr2 = cmd2.ExecuteReader();  //  now you can reader from rdr1 and rdr2 at the same time.

 

2.使用SqlBulkCopy批量装载数据(仅限SqlClient)

  以往访问 SQL Server 2000 时,若有大量的数据记录需要添加到数据库内,例如从主机系统或是 NCR Teradata、Oracle等数据库系统下载大量数据记录,我们想要将它们快速添加到 SQL Server 2000中,可以有的选择是调用 T-SQL 的 Bulk Insert 语法、通过Linked Server 执行 SELECT INTO 语法或是执行 bcp.exe 工具程序,以及通过 DTS 的 Bulk Insert Task 或启动Transform Data Task 的快速装载(Use Fast Load)设置。


  但若要通过自行编写的程序完成批次装载,只能以 C/C++ 调用 OLEDB 或 ODBC 的 Bulk API,无法通过 ADO.NET 或 ADO 等对象来执行。

  ADO.NET 2.0 的 SqlClient 提供了一个新的类称为 SqlBulkCopy,它让 DataSet 内大量的数据或是 DataReader通过数据流(Stream)直接读取大量的记录,可以快速将这些记录添加到目的数据库的数据表中。但要注意的是它并非如我们一般用的 bcp.exe工具程序,可以从某个符号分隔文件读取大量数据,选择性地搭配格式文件(Format File)将记录装载到数据库中,或是将数据库内的数据导出成为一个文件。但由于DataSet 能集成 XML 数据,因此依然可以采用 SqlBulkCopy 类型,轻松地通过 DataSet 将 XML 文件数据大量转入到数据库。



  可以利用SqlBulkCopy类快速写入大批量数据,针对SQL Server的优化,可以写入DataRow数据,DataTable,DataReader,并且可以映射不同的数据列名

  WriteToServer(DataTable)写入数据表

  WriteToServer(DataRow[])批次写入数据行

  WriteToServer(DataTable ,DataRowState)按行状态写入数据库表

WriteToServer(IDataReader)写入DataReader对象


  下面是个示例:
 

using  (SqlConnection sqlcon  =   new  SqlConnection( " Data Source=192.168.80.242;user id=oa;password=oapassword;initial catalog=test " )) { sqlcon.Open();  using  (SqlBulkCopy bcp  =   new  SqlBulkCopy(sqlcon)) { bcp.BulkCopyTimeout  =   3000 ; bcp.DestinationTableName  =   " dbo.Test01 " ; bcp.ColumnMappings.Add( " id " ,  " id " ); bcp.ColumnMappings.Add( " name1 " ,  " name1 " ); bcp.ColumnMappings.Add( " name2 " ,  " name2 " ); bcp.ColumnMappings.Add( " name3 " ,  " name3 " );  // 映射到不同名列 bcp.ColumnMappings.Add("changedname4", "name4"); bcp.WriteToServer(dt); sqlcon.Close(); } }


但是SqlBulkCopy使用时要注意以下几点:

  1   确认确实需要大容量更新在执行此操作,(几十行的数据请尽量使用别的渠道把). 

  2    确认数据一致性,与检查机制,以免遇到主键冲突,数据不符格式等意外。 

  3   SqlBulkCopy操作可能会导致对目标表元数据的更改(例如,禁用约束检查时)。如果出现这种情况,访问大容量插入表的并发快照隔离事务将失败。

  4   SqlBulkCopy将向数据库下大容量更新锁,请注意并发性,以免其他连接因长时间等待而超时。

3.二进序列制化的Dataset

  Dataset有个好属性是支持序列化,但是有很多人对其提出了批评。不是这些人不喜欢Dataset支持序列化,而是序列化后的Dataset真的是太肥了。大量的

  <xs:element name=””,type…占用了大量的空间以至让人难以忍受。


  现在我们只需要设置 RemotingFormat 属性为SerializationFormat.Binary(默认是SerializationFormat.XML),则在序列化时完全采用二进制的数据格式,如此数据较小,因而较有效率。(官方的观点是缩为SerializationFormat.XML的1/4)。

4 结果集直接装载DataTable

  可以通过DataTableReader对象生成DataTable和DataSet。利用DataTable和DataSet在2.0版本中新引入的方法Load,可以传递DataTableReader或者任何实现IDataReader接口的类对象。下面的代码就是通过Load方法将dt1的数据传递到新的数据表dt2中:

 

DataTableReader dtRdr  =  dt1.CreateDataReader(); DataTable dt2  =   new  DataTable(); dt2.Load(dtRdr);


   在使用Load方法装载多行数据时,可以先调用BeginLoadData方法来避免通知 (notifications),索引维护(index maintenance)以及约束检查(constraint checking),然后再通过EndLoadData方法返回数据。

 5.轻量级对象和快速遍历

  ADO.NET 2.0中的DataTable提供了CreateDataReader方法(在之前的版本名为GetDataReader),该方法将创建一个 DataTableReader对象。DataTableReader与DataTable不同,它是一个轻量级的对象,其支持 Disconnected,这一点与DataReader(SqlDataReader)不同。这些特点决定遍历DataTableReader对象将更加快速,占用的数据资源更少(Disconnected)。下面的代码创建了一个DataTableReader对象,并将其绑定到 DataGridView控件上:
 

using  (SqlConnection cn  =   new  SqlConnection(cnStr)) { SqlCommand cmd  =   new  SqlCommand(sqlAllCustomers, cn); SqlDataAdapter adpt  =   new  SqlDataAdapter(cmd); DataTable dtCustomers  =   new  DataTable( " Customers " ); adpt.Fill(dtCustomers); DataTableReader dtRdr  =  ds.CreateDataReader(); dgvCustomers.DataSource  =  dtRdr; }
Coppelia Sim (v-REP)仿真 机器人3D相机手眼标定与实时视觉追踪 (一) 先把这连个都添加到场景中,然后把kinect的depth相机拖到vision sensor中,把kinect的script也拖到vision sensor中,同时要注意修改深度相机的坐标,及修改script,删掉/rgb部分。由于需要导入到仿真场景中PDF文件不能直接导入,所以需要生成图下文件,使用windows自带的画图工具,生成以厘米为单位的图像格式,大小和标定板的设置大小一直。可以生成需要用的标定板的文件,设置标定板的大小,棋盘格的大小,等相关的参数,之后可以保存PDF文件。设置plane的大小。 阅读详情

相关推荐

STM32CubeMX定时器配置

因为只有当 CH2 处于 输入模式 时,硬件才能把这根脚送进滤波器(TI2FP2通道之前要滤波),再生成 TI2FP2 这条支路供 Slave-Mode 控制器使用,也就是说TI2FP2 并不是“独立存在”的,但在CubeMX配置时:如下图,我们只设置Slave Mode和TI1FP1,之后,CH1就自动配置为 Input Capture 了,下图发现,Channel1只能 Input Capture 或者Disable。哪来的主定时器和从定时器呢?把待测 PWM 的高电平当“门”,连接到ETR。

2402_89015641的博客 3183

SQL SERVER 数据库 批量 脚本 升级 更新工具 (C# .Net 2.0)

为了使用sql脚本对分散在的不同SQL SERVER 服务器中的多帐套数据库进行主动更新,制作一个批量更新的小程序,使用起来很方便. 更新单个数据库  设置好需要更新的服务器连接信息和每个服务器的帐套 设置下脚本文件位置,单击开始更新,就完事啦。下次需要更新,更换下脚本文件。 文本框中详细显示更新进程,给出更新失败的原因  下载地址: http:

sruijun的专栏 1893

Revit Dynamo实战:用Excel数据批量生成桥梁模型(附自适应族技巧)

本文详细介绍了如何利用Revit Dynamo结合Excel数据实现桥梁参数化建模,重点讲解了数据驱动建模、自适应族优化及大型项目性能管理三大核心技巧。通过结构化Excel数据、高级自适应族创建和分块处理策略,显著提升桥梁建模效率与设计变更响应能力。

weixin_42520025的博客 386

VB.NET连接SQL server数据库解决方案(转载+亲自实践)

原文来自:http://hi.baidu.com/mwd_3330410/blog/item/ba0ccd240a0902184c088d83.html    Microsoft Visual Basic.NET是Microsoft Visual Basic的更新版本,它基于.NET的框架结构,能使用户非常容易地创建Microsoft Windows操作系统和网络的应用程序。 使用Visual

bigheadsheep的专栏 1万+

Alphafold2/multimer Conda环境配置与GPU加速优化指南

本文详细介绍了如何在本地服务器或工作站上,通过Conda环境配置并优化GPU加速来部署Alphafold2及其多聚体版本Alphafold2-multimer。内容涵盖从硬件准备、依赖安装、数据库部署到实战预测与常见报错处理的全流程,重点解决了本地安装过程中的依赖冲突与GPU调用失败等关键问题,帮助研究人员高效运行这一蛋白质结构预测工具。

neovim7hacker的博客 470

智能生活中枢:基于 ESP32-S3 的桌面智能助手与日程提醒终端设计与实现

本文完成了基于 ESP32-S3 的桌面智能助手与日程提醒终端的完整设计,实现了时间同步、日程管理、声光提醒、环境监测、本地存储等核心功能。硬件接线简洁、软件逻辑清晰,可直接制作成品使用。硬件方案:以 ESP32-S3 为核心,搭配 OLED、DS3231、DHT11、按键、声光模块,接线标准化、易复刻;软件方案:基于 Arduino 开发,提供标准 Mermaid 软件流程图,代码模块化、可直接编译运行;核心功能:网络授时、本地日程管理、掉电存储、声光提醒、温湿度监测,满足桌面智能助手全场景需求。

weixin_42300449的博客 209

VB.net 大量插入数据库的方法

Imports System.Data.SqlClient Public Class Form1 Public sql As SqlConnection Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load sql = New SqlConnection("D...

aa326358942的博客 2238

OpenGL 进阶系列10 - 光线跟踪实现简介(Ray Tracing)

OpenGL 实现光线跟踪(Ray Tracing)是一个相对复杂但有趣的挑战,通常用于生成高度逼真的图像效果,如反射、折射、阴影等。OpenGL 本身并不是为光线跟踪设计的,但可以通过结合计算着色器和现代 OpenGL 功能实现光线跟踪。光线跟踪的基本思路是从相机(或视点)出发,发射光线并计算这些光线与场景中物体的交点。光线与场景中物体相交的计算。计算交点的光照(基于表面法线、光源位置、材质等)。反射和折射的处理(如果物体是透明或反射的)。

GPU全栈博主 1534

ADO.NET2.0提升数据交互性能

ADO.NET2.0提升数据交互性能

princelintb的专栏 722

基于大语言模型的学术论文阅读辅助分析系统的研究与应用

本文提出了一种基于大语言模型的学术论文阅读辅助分析系统PaperMind,旨在解决传统学术阅读方式面临的三大困境:信息定位困难、跨学科知识断层和手动整理耗时。系统采用检索增强生成(RAG)架构,通过PDF文档解析、语义分割、向量嵌入与FAISS向量检索相结合的技术路线,构建了完整的文档处理流水线。实验结果表明,系统在文档加载分割、向量检索与问答生成环节均达到预期性能指标,检索命中率最高达98%。该系统为学术文献智能化处理提供了可复用的技术方案,有效解决了通用大语言模型在学术场景中的幻觉引用、归因能力不足等问

huanghm88的专栏 93

基于STM32L4XX、HAL库的BQ25713RSNR充电芯片驱动程序设计

define BQ25713_I2C_ADDR (0x6B << 1) // 7位地址为 0x6B,HAL库需要左移一位。// 示例:配置 CHARGE_OPTION_0 寄存器:使能充电,使能 ICO(输入电流优化)reg_data |= (EN_CHG_MASK | EN_ICO_MASK);

zhusl6688的博客 406

使用ADO.NET2.0提升数据交互性能 使用SqlBulkCopy批量写入数据库

四:使用SqlBulkCopy批量装载数据(仅限SqlClient)   以往访问 SQL Server 2000 时,若有大量的数据记录需要添加到数据库内,例如从主机系统或是 NCR Teradata、Oracle等数据库系统下载大量数据记录,我们想要将它们快速添加到 SQL Server 2000中,可以有的选择是调用 T-SQL 的 Bulk Insert 语法、通过Linked Serve

emailqjc的专栏 1324

10天冲刺国自然基金!用这套实战AI提示词指令教程,助你中标率翻倍!亲测DeepSeek和ChatGPT不好用

虽然以上国自然提示词指令经过反复实测,但并不是万能无脑帮你搞定所有,大模型AI的特性是你专业领域能力越强,它的智商表现就会更加强大,通过以上提示词教程的使用,大大提升中标概率是肯定的。还有就是大模型的使用上,不是市面上大家都说好的就一定适用,目前来看,Gemini和Claude的两个模型是非常适合国自然本子的修改的。在使用大模型进行国自然本子撰写修改时,首先是角色的设定,然后是目标和背景的描述,好用的提示词指令都是要经过无数次的实测,比对输出结果后又反复调整,达到最佳的效果状态的提示词指令。

智能AI让学术科研更容易 1245

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

使用ADO.NET2.0提升数据交互性能(1)

前言: 这篇文章起源于在公司写的一个PPT,但是由于PPT本身的限制很多内容无法表达或是详细的解释,于是变下定了决心。写篇文档! 在这篇文章里我将尽量简单的描述下ADO.NET 2.0的新特性,尤其是配合SQL Server 2005所展现出来的强大实力。如果想进一步了解ADO.NET 2.0编程方面的话,可以去阅读Glenn Johnson的--"ADO.NET 2.0高级编程[微软推...

weixin_30764137的博客 85

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

使用ADO.NET2.0提升数据交互性能(3)

四:使用SqlBulkCopy批量装载数据(仅限SqlClient) 以往访问 SQL Server 2000 时,若有大量的数据记录需要添加到数据库内,例如从主机系统或是 NCR Teradata、Oracle等数据库系统下载大量数据记录,我们想要将它们快速添加到 SQL Server 2000中,可以有的选择是调用 T-SQL 的 Bulk Insert 语法、通过Linked Server...

weixin_30662109的博客 106

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

[转贴]使用ADO.NET2.0提升数据交互性能(http://dotnet.chinaitlab.com/ADONET/739268.html)

这篇文章起源于在公司写的一个PPT,但是由于PPT本身的限制很多内容无法表达或是详细的解释,于是变下定了决心。写篇文档! 在这篇文章里我将尽量简单的描述下ADO.NET 2.0的新特性,尤其是配合SQL Server 2005所展现出来的强大实力。如果想进一步了解ADO.NET 2.0编程方面的话,可以去阅读Glenn Johnson的--"ADO.NET 2.0高级编程[微...

diaogeng5745的博客 199

ADO.NET 2.0 基础

译自Apress.Pro.ASP.NET.2.0.in.C#.2005第7章 ADO.NET基础相当多的计算机应用,包括桌面和Web应用,都是数据驱动的(data-driven)。这些应用特别关心获取、显示和修改数据。获取和处理数据看起来是很直截了当的工作,但在过去十年里,应用使用数据的方法反复改变了多次。开发人员从简单的使用本地数据的客户端应用转移到了基于专业集中化的数据库的分布是系

从今天起 3765

ADO.NET 2.0 中的新增 DataSet 功能

ADO.NET 2.0 中的新增 DataSet 功能Jackie Goldstein Renaissance Computer Systems 适用于: Microsoft ADO.NET 2.0 Visual Basic 编程语言 摘要:了解有关 .NET Framework DataSet 类以及与它密切相关的类中的新增 ADO.NET 2.0 功能的知识。这些更改包

山里娃的专栏 1134

ADO.NET2.0的十大新特性

本文简要介绍了.NET Framework 2.0里的ADO.NET2.0的最新特性。在以下叙述中将附带一些简单的例子来讨论这些特性的细节。   以下便是ADO.NET新增的特性:  1. 批量复制操作(Bulk Copy Operation)  将数据从一个数据源批量复制到另一个数据源是ADO.NET 2.0的一个新特性。批量复制类提供了最快的方法把数据从一个数据源迁移到另一个数据源。每个ADO

fzzf 851

ADO.NET2.0的十大最新特性

                                                                         ADO.NET2.0的十大最新特性         这篇文章概述了.NET Framework 2.0里的ADO.NET2.0的最新特性。在以下叙述中将附带一些简单的例子来讨论这些特性的细节。  以下便是ADO.NET新增的特性:  1. 批量复

enven的专栏 946

ADO.NET 2.0中的DataSet和DataTable

原文链接:http://msdn.microsoft.com/msdnmag/issues/05/11/DataPoints/default.aspx MSDN2005年11月刊登载了John Papa的一篇文章《DataSet and DataTable in ADO.NET 2.0》,详细介绍了ADO.Net 2.0的一些新功能和特性,对于利用ADO.NET开发的程序员来说,是...

dcryefx44317的博客 147

使用 ADO.NET 解锁 Microsoft Access 数据

使用 ADO.NET 解锁 Microsoft Access 数据 Paul CornellMicrosoft Corporation 2001 年 12 月 6 日 Microsoft® Office 提供了多种存储和管理数据的功能和工具,例如,数据访问对象 (DAO)、ActiveX® 数据对象 (ADO)、Microsoft Word 邮件合并、Microsoft Excel Web

sonicdater的专栏 1558
上一篇: 动态sql语句基本语法
下一篇: .net页面间的参数传递简单实例
mingzhecode
博客等级 码龄19年 13粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值