一、SqlDataReader和SqlDataAdapter性能对比

  Stopwatch sw = new Stopwatch();
             sw.Start();
             using(SqlConnection cnn = new SqlConnection(@"Data Source=RuyeeSoft\SqlExpress;user id=sa;password=123;Initial catalog=NorthWind"))
             {
                 SqlCommand cmd = cnn.CreateCommand();
                 cmd.CommandText = "select top(2000000) * from student";
                 cnn.Open();
                 SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

                 DataTable auto = new DataTable("Auto");

                 DataColumn vin = new DataColumn("ID");
                 vin.DataType = typeof(int);
                 vin.Unique = true;
                 vin.AllowDBNull = false;
                 vin.Caption = "ID";
                 auto.Columns.Add(vin);

                 DataColumn Name = new DataColumn("Name");
                 Name.DataType = typeof(string);
                 Name.MaxLength = ;
                 //Name.Unique = true;
                 Name.AllowDBNull = false;
                 Name.Caption = "Name";
                 auto.Columns.Add(Name);

                 DataColumn score = new DataColumn("score");
                 score.DataType = typeof(int);
                 //score.Unique = true;
                 score.AllowDBNull = false;
                 score.Caption = "score";
                 auto.Columns.Add(score);

                 while (rdr.Read())
                 {
                     DataRow newAuto = auto.NewRow();
                     newAuto[);
                     newAuto[);
                     newAuto[);
                     auto.Rows.Add(newAuto);
                 }
             }
             sw.Stop();
             Console.WriteLine("1总运行时间:" + sw.Elapsed);

             sw.Start();
             using (SqlConnection cnn = new SqlConnection(@"Data Source=ruyeesoft\SqlExpress;user id=sa;password=123;Initial catalog=NorthWind"))
             {
                 SqlCommand cmd = cnn.CreateCommand();
                 cmd.CommandText = "select top(2000000) * from student";
                 SqlDataAdapter sda = new SqlDataAdapter(cmd);
                 DataTable dt = new DataTable();
                 cnn.Open();
                 sda.Fill(dt);
             }
             sw.Stop();
             Console.WriteLine("2总运行时间:" + sw.Elapsed);

对比结果

100万条数据的效果
1总运行时间:00:00:11.3748084
2总运行时间:00:00:18.0405345

200万条数据的效果
1总运行时间:00:00:24.1619173
2总运行时间:00:00:37.6120735

二、使用非连接数据

1、关于并发:

由于不同的客户端拿到了相同版本的副本,修改后都要讲结果保存到数据库中,这时出现了以哪个修改后的副本为最新版本的决策冲突问题。

2、解决并发冲突:

a、时间优先:第一次更新优先。

b、时间优先:最后一次更新优先。

c、角色优先:看获取副本的客户端的权限级别,谁级别高以谁为准。

d、位置优先:如总部优先与分店。

e、用户解决冲突:提供一个解决冲突界面,让用户选择数据的版本。如tfs的版本冲突解决策略。

3、应该加载什么离线数据

a、数据选择:应该只加载用户需要处理的数据,而不是加载整个数据库。

b、数据量:数量量的大小会影响加载的时间、更新的时间和客户的内存需求量。

c、分割数据:根据业务的使用目的,最好将数据分割成多个部分,并分别存入相应的DataSet对象中。不能在不同的DataSet对象的DataTable对象之间建立外键约束。

4、为了更好的使用离线数据,请使用GUID作为数据库的主键。

ADO.NET 拾遗的更多相关文章

  1. .NET基础拾遗(6)ADO.NET与数据库开发基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基 ...

  2. .NET基础拾遗(8)ADO.NET与数据库开发基础

    1.1 ADO.NET支持哪几种数据源? ① System.Data.SqlClient .NET程序员最常用的了.通过OLEDB或者ODBC都可以访问,但是SqlClient下的组件直接针对MSSQ ...

  3. Ado.Net基础拾遗二:插入,更新,删除数据

    插入数据 public void InsertDataToSQL() { string conStr = ConfigurationManager.ConnectionStrings["No ...

  4. Ado.Net基础拾遗一:读取数据

    从数据库中读取数据: 使用DataReader对象从数据库中读取数据 首先需要添加几个命名空间 //需要添加的命名空间 using System.Configuration; using System ...

  5. .NET基础拾遗(5)多线程开发基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

  6. ADO.NET对象的详解

    1. Connection 类 和数据库交互,必须连接它.连接帮助指明数据库服务器.数据库名字.用户名.密码,和连接数据库所需要的其它参数.Connection对象会被Command对象使用,这样就能 ...

  7. WebForm获取GET或者POST参数到实体的转换,ADO.NET数据集自动转换实体

    最近在修改维护以前的webform项目(维护别人开发的.....)整个aspx没有用到任何的控件,这个我也比较喜欢不用控件所以在提交信息的时候需要自己手动的去Request.QueryString[] ...

  8. ADO.NET编程之美----数据访问方式(面向连接与面向无连接)

    最近,在学习ADO.NET时,其中提到了数据访问方式:面向连接与面向无连接.于是,百度了一下,发现并没有很好的资料,然而,在学校图书馆中发现一本好书(<ASP.NET MVC5 网站开发之美&g ...

  9. ADO.NET一小记-select top 参数问题

    异常处理汇总-后端系列 http://www.cnblogs.com/dunitian/p/4523006.html 最近使用ADO.NET的时候,发现select top @count xxxx 不 ...

随机推荐

  1. 《JS高程》JS-Object对象整理

    继上篇<JS高程>对象&原型笔记,对JavaScript中的Object对象进行了整理,梳理一遍~ 参考文章:详解Javascript中的Object对象 ------------ ...

  2. 【题解】【矩阵】【DP】【Leetcode】Minimum Path Sum

    Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which ...

  3. 【题解】【矩阵】【回溯】【Leetcode】Unique Paths II

    A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...

  4. Oracle 12C RAC的optimizer_adaptive_features造成数据插入超时

    问题分析 使用10046事件追踪方式,直接生成上传时的数据库事件日志进行分析,发现主要区别在于以下两条sql语句在每次长时间上传时都有出现,并且执行用户不是上传用户,而是数据库SYS用户. ***** ...

  5. centos彻底删除文件夹、文件命令(centos 新建、删除、移动、复制等命令)

    centos彻底删除文件夹.文件命令(centos 新建.删除.移动.复制等命令: 1.新建文件夹 mkdir 文件名 新建一个名为test的文件夹在home下 view source1 mkdir ...

  6. 83. Remove Duplicates from Sorted List

    Given a sorted linked list, delete all duplicates such that each element appear only once. For examp ...

  7. mysql最大连接数

    通常,mysql的最大连接数默认是100, 最大可以达到16384.1.查看最大连接数:show variables like '%max_connections%';2.修改最大连接数方法一:修改配 ...

  8. Web端文件打包.zip下载

    使用ant.jar包的API进行文件夹打包.直接上代码: String zipfilename = "test.zip"; File zipfile = new File(zipf ...

  9. Blob 构造函数

    Blob 构造函数使 Web 开发人员可直接在客户端上创建或操作 Blob(经常等效于一个文件). 该构造函数在 W3C 的文件 API 规范中进行定义,该规范目前尚处于工作草案阶段.在较早版本的文件 ...

  10. Oracle学习系列3

    Oracle学习系列3 ************************************************************************************ 多表查 ...