ADO.NET 拾遗
一、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 拾遗的更多相关文章
- .NET基础拾遗(6)ADO.NET与数据库开发基础
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基 ...
- .NET基础拾遗(8)ADO.NET与数据库开发基础
1.1 ADO.NET支持哪几种数据源? ① System.Data.SqlClient .NET程序员最常用的了.通过OLEDB或者ODBC都可以访问,但是SqlClient下的组件直接针对MSSQ ...
- Ado.Net基础拾遗二:插入,更新,删除数据
插入数据 public void InsertDataToSQL() { string conStr = ConfigurationManager.ConnectionStrings["No ...
- Ado.Net基础拾遗一:读取数据
从数据库中读取数据: 使用DataReader对象从数据库中读取数据 首先需要添加几个命名空间 //需要添加的命名空间 using System.Configuration; using System ...
- .NET基础拾遗(5)多线程开发基础
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...
- ADO.NET对象的详解
1. Connection 类 和数据库交互,必须连接它.连接帮助指明数据库服务器.数据库名字.用户名.密码,和连接数据库所需要的其它参数.Connection对象会被Command对象使用,这样就能 ...
- WebForm获取GET或者POST参数到实体的转换,ADO.NET数据集自动转换实体
最近在修改维护以前的webform项目(维护别人开发的.....)整个aspx没有用到任何的控件,这个我也比较喜欢不用控件所以在提交信息的时候需要自己手动的去Request.QueryString[] ...
- ADO.NET编程之美----数据访问方式(面向连接与面向无连接)
最近,在学习ADO.NET时,其中提到了数据访问方式:面向连接与面向无连接.于是,百度了一下,发现并没有很好的资料,然而,在学校图书馆中发现一本好书(<ASP.NET MVC5 网站开发之美&g ...
- ADO.NET一小记-select top 参数问题
异常处理汇总-后端系列 http://www.cnblogs.com/dunitian/p/4523006.html 最近使用ADO.NET的时候,发现select top @count xxxx 不 ...
随机推荐
- js取配置文件内容
使用 jQuery.i18n.properties 实现 Web 前端的国际化 http://www.ibm.com/developerworks/cn/web/1305_hezj_jqueryi18 ...
- 如何将character_set_database latin1 改为 gbk(转)
第一篇文章: 原地址: Linux服务器下文件名为 my.cnf Windows 下文件名为 my.ini 问题:通过sql语言向数据库中添加中文的数据的时候,查询是显示的是乱码. 原因:当初安装数据 ...
- Java中生成随机字符的方法总结
package learnExercise; public class RandomCharacter { public static char getRandomCharacter(char ch1 ...
- UI学习笔记---第七天
UIScrollView 滚动视图 UIScrollView的常用属性 iPone屏幕大小限制了内容的显示,UIScrollView 类提供了屏幕滚动功能 UIScrollView是所有滑动视图的 ...
- xcode中的一些快捷键
隐藏xcode command+h退出xcode command+q关闭窗口 command+w关闭所有窗口 command+option+w关闭当前项目 command+control+w关闭当前文 ...
- 十日谈 (share)
@拔赤 一直想写这篇“十日谈”,聊聊我对Web前端开发的体会,顺便解答下周围不少人的困惑和迷惘.我不打算聊太多技术,我想,通过技术的历练,得到的反思应当更重要. 我一直认为自己是“初级”前端开发工程师 ...
- ZOJ 1151 Word Reversal
原题链接 题目大意:给一句话,把每个单词倒序,然后输出. 解法:我是用了一个堆栈,以空格来拆分单词,把每个字母压入堆栈,然后依次输出. 参考代码: /* * 字符串反向,140ms,188kb * 单 ...
- 卸载linux自带版本JDK
1)卸载系统自带的jdk版本: 查看自带的jdk: #rpm -qa|grep gcj 可能看到如下类似的信息: libgcj-4.1.2-44.el5 java-1.4 ...
- timus 1106 Two Teams(二部图)
Two Teams Time limit: 1.0 secondMemory limit: 64 MB The group of people consists of N members. Every ...
- UVALive-7303 Aquarium (最小生成树)
题目大意:在nxm的方格中,每一个1x1的小方格中都有一堵沿对角线的墙,并且每堵墙都有一个坚固程度,这些墙将nxm的方格分割成了若干个区域.现在要拆除一些墙,使其变成一个区域. 题目分析:将区域视作点 ...