(ADO.NET小知识点汇总)看到什么记什么

1、数据库连接池:在同时连接数不多的情况下,

打开一个链接往数据库导1W条数据的耗时

导一条数据就打开跟关闭数据库连接的耗时

两者其实相差不大,这是为什么呢?打开关闭的本身不是有很多耗时吗?这是因为数据库连接池的存在

当你同时连接数打开的不多的情况下,你关闭一个链接,实际上,这个链接并没有关闭,而是被.Net偷偷藏起来,当然这个藏起来的链接数数量

是有限定的,所以当你导一条,打开关闭一个链接这种方式导数据时,其实并未真正在“打开关闭连接”。

2、批量数据提交:SqlBulkCopy类   以读取号码归属地这样一个文本为例

首先是把数据读取进来,放到一个本地大集合DataTable中,然后再把这个table扔到数据库中

DataTable table = new DataTable();

table.Columns.Add("TelNum");//自己定义的table里面的列名,任意取

table.Columns.Add("City");

table.Columns.Add("TelType");

for(int i = 0;i < lines.Length; i ++)//lines是已经从打开的文本中读取到的集合,一行为单位

{

  //获取需要往数据库填的字符串

  string line = lines[i];

  string[] strs = line.Split(‘/t‘);//VS里‘/t‘为制表符 以制表符来分割

  string telNum = strs[0];

  string city = strs[1].Trim(‘"‘);//去掉两边的双引号 :"北京市"

  string telType = strs[2].Trim(‘"‘);

  //然后把数据填充到DataTable中,不过这里需要用到DataRow对象

  DataRow row = table.NewRow();

  row["TelNum"] = telNum ;//一定要在一开始创建table.Columns添加列

  row["City"] = city ;

  row["TelType"] = telType ;

  //然后把Row跟Table关联起来

  table.Rows.Add(row);

}

//以上操作已经把从文本读到的数据填充到了DataTable中,接下来该把表扔到数据库里了

using(SqlBulkCopy bulk = new SqlBulkCopy(ConnStr))

{

  bulk.DestinationTableName = "T_TelNum";//数据库中存数据的表名

  //第一个参数是DataTable中自己定义的列名,第二个参数是数据库表中定义的列名,

  //两个表的列关联起来 (映射!)

  bulk.ColumnMappings.Add("TelNum","TelNum");

  bulk.ColumnMappings.Add("City","TelArea");

  bulk.ColumnMappings.Add("TelType","TelType");

  bulk.WriteToServer(table);//前期工作做完,把DataTable扔到数据库中。

}

不用这个类,20分钟。用这个类9秒钟~~~~~~~醉醉哒

个人理解:先把数据填到本地数据集DataTable,这样都在本地进行,只是读取字符串,然后一次性的把数据扔到数据库。

而直接把数据一条条读到数据库中,其中涉及的内部操作,代码量显然是巨大的。

两者的数据量相同,所以我认为,时间相差这么多,是花在与数据库相互中产生的大量代码量。(也不知道这么说合不合适,给自己看的- -)

时间: 2024-08-29 22:46:31

(ADO.NET小知识点汇总)看到什么记什么的相关文章

年度巨献-WPF项目开发过程中WPF小知识点汇总(原创+摘抄)

WPF中Style的使用 Styel在英文中解释为”样式“,在Web开发中,css为层叠样式表,自从.net3.0推出WPF以来,WPF也有样式一说,通过设置样式,使其WPF控件外观更加美化同时减少了大量的复杂属性的设置. 在WPF中,设置外观样式我们有很多种方式,比如通过设置控件的属性来控制控件的外观样式:或者通过在每一个控件中分别设置Style:或者通过在整个Window.Resource中设置Style,又或者在App.xaml的Application.Resource设置Style. 在

python基础(十二)--小知识点汇总及编码进阶

'''python2 python3 '''#python2#print()  print 'abc'#range()   xrange() 生成器# raw_input() #python3#print('abc')#range()# input() # = 赋值 == 比较值是否相等   is 比较,比较的是内存地址  id(内容)# li1 = [1,2,3]# li2 = li1# li3 = li2# print(id(li1),id(li2)) #数字,字符串 小数据池#数字的范围

我所遇到的shell小知识点汇总

1)shell if 的使用 判断a.txt是否存在 if [ -f a.txt] 2)命令的执行结果 将命令的执行结果赋值给变量,以下两种方法是一样的 time=$(date + %Y%m) time=`date + $Y%m` 3)查找出我们需要的东西 这个可以用来判断命令的执行结果,通过所选取的文件或命令执行结果中是否有相应的值 -o表示匹配的就只是我们关心的部分,加-P表明后面的pattern是perl兼容正则表达式,因为pcre支持零宽断言 [[email protected] by-

Linux 一些小知识点汇总(持续更新....)

一.符号 1.[email protected]:传递的参数. 2.$# :传递参数的数量. 3.$?:指上一次执行命令后的返回值.一般0表示运行成功. 补充:$?只表示上一个命令执行后的退出状态,当命令执行后,又执行了其他命令,然后查看$?状态时,只表示第二个执行命令的状态,与第一个无关. 4.$! :后台运行的最后一个进程的进程号(PID). 5.$$:当前进程的进程号(PID). 6.!!:再次执行上一次运行的命令,并在屏幕上打印出所执行的命令. 7.!*:替代上一次运行的命令,参数继续沿

Linux小知识点汇总

? ? 1.crontab? ? (1)crontab每10秒执行一次? * * * * * /bin/date >>/tmp/date.txt? * * * * * sleep 10; /bin/date >>/tmp/date.txt? (2)还可以用以下方式表达? string????????????meaning??------???????????-------??@reboot????????Run?once,?at?startup.??@yearly?????????

Windows 小知识点汇总

_T() 1.定义 _T("")是一个宏,定义于tchar.h下. #define   __T(x)  L ## x #define   _T(x)  __T(x) 2.作用 它的作用是让你的程序支持Unicode编码,因为Windows使用两种字符集ANSI和UNICODE,前者就是通常使用的单字节方式,但这种方式处理像中文这样的双字节字符不方便,容易出现半个汉字的情况.而后者是双字节方式,方便处理双字节字符. Windows NT的所有与字符有关的函数都提供两种方式的版本,而Win

【我的笔记BLOG——小知识点汇总】

1.<%  %> ,  <%-  %> ,  <%= %>的区别 ejs的标签分为三种: (1)<% code %>   javascript代码 (2) <%- code  %>  显示结果会按HTML语法转换格式 (3)<%= code  %>  显示原样结果 例: 若code为<h1> hello </h1> 则 <%- code  %>   ,输出  h1大的hello: <%= co

Android开发之实用小知识点汇总-1

1.去掉android屏幕中的actionbar: 1 this.requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉标题栏 2 //这个是全屏幕显示的代码 3 this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); 3 setContentView(R.layout.logi

Android开发之实用小知识点汇总-2

1.EditText 中将光标移到文字末尾: 1 EditText mEdit = (EditText)this.findViewById(R.id.EditText01); 2 mEdit .setText("abcdefg"); 3 Editable b = mEdit .getText(); 4 mEdit .setSelection(b.length()); 2.Android TextView文字横向自动滚动(***灯效果) (1)重写TextView 1 public cl