- 浏览: 38701 次
文章分类
最新评论
平时老是碰到把一批数据插入到数据库。通常的办法是循环一条条插进去,也挺好的挺省事,但是如果数据超过1000以上,真是慢啊,而且占资源,好在微软都替我们想好了,用SqlBulkCopy这个方法很方便,纷纷秒就被上万数据导进去了;
具体作法分享如下:
1.建一个表DataTable把数据首先插到表里
2.第二步设置表的表的对应关系
3.把数据导入数据
具体作法分享如下:
1.建一个表DataTable把数据首先插到表里
DataTable dt = new DataTable(); dt.Columns.Add("HTH");//合同号 dt.Columns.Add("HTMC");//合同名称 dt.Columns.Add("HKYF");//回款月份 dt.Columns.Add("JF");//甲方 dt.Columns.Add("JFMS");//甲方描述 dt.Columns.Add("QDRQ");//签订日期 dt.Columns.Add("QDRBM");//签订人编码 dt.Columns.Add("QDR");//签订人 dt.Columns.Add("HKZRRBM");//回款责任人编码 dt.Columns.Add("HKZRRMS");//回款责任人描述 dt.Columns.Add("HKZRRBMBM");//回款责任人描述 dt.Columns.Add("HKZRRBMMS");//回款责任人部门描述 dt.Columns.Add("HTE");//合同额 dt.Columns.Add("BB");//币别 dt.Columns.Add("YSK");//已收款 dt.Columns.Add("WSK");//未收款 dt.Columns.Add("WDZ");//未达账 dt.Columns.Add("GS");//公司 if (table.Count > 0) { for (int i = 0; i < table.Count; i++) { table.CurrentIndex = i; DataRow dr = dt.NewRow(); dr["HTH"] = table.GetString("BSTNK") ?? ""; //合同号 dr["HTMC"] = table.GetString("ZSD019") ?? ""; //合同名称 dr["HKYF"] = strHKYF; dr["JF"] = table.GetString("KUNNR") ?? "";//甲方 dr["JFMS"] = table.GetString("ZKHMC") ?? "";//甲方描述 dr["QDRQ"] = Convert.ToDateTime(table.GetString("BSTDK")); //签订日期 if (Convert.ToDateTime(table.GetString("BSTDK"))<Convert.ToDateTime("1900-01-01")) { dr["QDRQ"] =Convert.ToDateTime("1900-01-01"); } dr["QDRBM"] = table.GetString("ZQDR") ?? "";//签订人编码 dr["QDR"] = table.GetString("ZQDRM") ?? "";//签订人 //dr["HTE"] = table.GetString("ZHTJE");//合同金额 dr["HKZRRBM"] = table.GetString("ZHKR") ?? "";//回款责任人编码 dr["HKZRRMS"] = table.GetString("ZHKRM") ?? "";//回款责任人描述 dr["HKZRRBMBM"] = table.GetString("ZHKR") ?? "";//回款责任人部门 TODO:sap dr["HKZRRBMMS"] = table.GetString("ZHKRM") ?? "";//回款责任人部门 描述TODO:sap dr["HTE"] = table.GetDecimal("ZHTJE"); //合同额 dr["BB"] = table.GetString("WAERS") ?? ""; //币别 dr["YSK"] = table.GetString("ZYSK") ?? "";//已收款 dr["WSK"] = table.GetDecimal("ZWSK");//未收款 dr["WDZ"] = table.GetDecimal("ZWDZ");//未收款 dr["GS"] = table.GetString("VKORG");//公司 TODO:SAP销售组织 decimal deWsk=0; decimal.TryParse(dr["WSK"].ToString(),out deWsk); if(deWsk>0) dt.Rows.Add(dr); } } return dt;
2.第二步设置表的表的对应关系
using (SqlConnection con=new SqlConnection (strConn)) { con.Open(); using (SqlTransaction tr = con.BeginTransaction()) { cmdText = "DELETE FROM T_PC_PaymentCollection WHERE TypeSatus='同步' and PCMonth='" + strPCMonth + "'"; using (SqlCommand c = new SqlCommand(cmdText, con,tr)) { c.ExecuteScalar(); iRCount++; } using (SqlBulkCopy bulkCopy = new SqlBulkCopy(strConn)) { // 列映射 bulkCopy.DestinationTableName = "T_PC_PaymentCollection"; bulkCopy.ColumnMappings.Add("HTH", "ContractNumber");//合同号 bulkCopy.ColumnMappings.Add("HTMC", "ContractName");//合同名称 bulkCopy.ColumnMappings.Add("HKYF", "PCMonth");// //bulkCopy.ColumnMappings.Add("HTMC", "PCCompany");//公司TODO:等待SAP bulkCopy.ColumnMappings.Add("JF", "FirstPartyID");//甲方 bulkCopy.ColumnMappings.Add("JFMS", "FirstParty");//甲方描述 bulkCopy.ColumnMappings.Add("QDRQ", "SignDate");//签订日期 bulkCopy.ColumnMappings.Add("QDRBM", "SignPersonID");//签订人编码 bulkCopy.ColumnMappings.Add("QDR", "SignPerson");//签订人 bulkCopy.ColumnMappings.Add("HKZRRBM", "ResponsiblePersonId");//回款责任人编码 bulkCopy.ColumnMappings.Add("HKZRRMS", "ResponsiblePersonName");//回款责任人描述 bulkCopy.ColumnMappings.Add("HKZRRBMMS", "PCDepartment");//回款责任人部门描述 bulkCopy.ColumnMappings.Add("HTE", "ContractMoney");//合同额 bulkCopy.ColumnMappings.Add("BB", "Currency");//币别 bulkCopy.ColumnMappings.Add("YSK", "ReceivedMoney");//已收款 bulkCopy.ColumnMappings.Add("WSK", "TransitAccount");//未收款 //bulkCopy.ColumnMappings.Add("WDZ", "NotComeAmount");//未达款 bulkCopy.ColumnMappings.Add("GS", "PCCompany");// //int iActionStauts = 0; try { bulkCopy.WriteToServer(dt); iActionStauts = 1; UpdateExeFlag(ir, iActionStauts); tr.Commit(); } catch (Exception) { iActionStauts = 0; tr.Rollback(); UpdateExeFlag(ir, iActionStauts); } } }
3.把数据导入数据
try { bulkCopy.WriteToServer(dt); iActionStauts = 1; UpdateExeFlag(ir, iActionStauts); tr.Commit(); } catch (Exception) { iActionStauts = 0; tr.Rollback(); UpdateExeFlag(ir, iActionStauts); }
发表评论
-
C# GDI设计的高级时钟,很有用收藏了。
2015-03-09 12:44 635效果图: 接着上次的简单时钟,这次要高级多了,算法更正 ... -
SQL索引一步到位(此文章为“数据库性能优化二:数据库表优化”附属文章之一)
2015-02-04 09:54 343SQL索引在数据库优化中 ... -
SQL中索引的原理1
2015-02-04 09:35 565(一)深入浅出理解索 ... -
怎样提高WebService的性能
2015-02-03 13:51 1753服务器端WebService程序: using Syste ... -
数据库中的数据到C#代码中的数值要注意转换了
2015-01-26 11:03 425如下,从数据库的存储过程传值过去给C#,如果不再转换一次,C# ... -
SQL Server 删除表中重复的记录的方法记录
2015-01-20 08:38 281--delete from [T_SaleConfirmSta ... -
写sql时经常会碰到条件不定的情况,这样的技巧受用无限
2015-01-19 18:03 460写sql时经常会碰到条件不定的情况,好多兄弟都是在哪儿无穷的拼 ... -
SQL Server数据库中时间比较,这样比较准确
2015-01-19 17:56 558SQL数据库中对于时间的精确度比较做的不是很好。有时候是把值当 ... -
ASP.net网站性能提高办法 无意中从网上浏览到了一篇提高网站性能的帖子转来学习下。
2015-01-16 13:42 474ASP.net网站性能提高办法 无意中从网上浏览到了一篇提高网 ... -
asp.net创建缩略图
2015-01-16 12:01 337记录一个保存缩略图通用的函数。 + View C ... -
让ADO.NET Entity Framework支持Oracle数据库 好东西收藏了
2015-01-16 11:35 477项目需要基于.NET平台,个人的习惯是能用微软自带的就不用第三 ... -
数据库中事务使用实例
2015-01-16 11:18 7871.数据库的事务很重要,在保持数据一致性有很大的用处 US ... -
使用SqlBulkCopy导入大数据要注意
2015-01-13 14:17 518第一次用挺好,第二次就出问题了:我的表里边已经有数据,而且加了 ... -
不要让你的错误处理把错误给吃了,千万注意不然费时费力
2015-01-13 10:48 548开发中老鸟总是说你的程序怎么不够友好,都不加错误处理,给用户报 ... -
SQL Server中查看那个进程阻塞数据库的存储过程,收藏了
2015-01-13 10:20 1671use master go alter procedu ... -
SQL Server类型与C#类型对应关系 好东西收藏了
2015-01-13 09:14 1510SQL Server类型 C#类型 bit bool tiny ... -
asp.net 中URL 编码窗体数据无效提示错误处理记录
2015-01-12 15:50 694一个系统,其他用户都没有问题,就是一个用户说报错 后来查 ... -
报表SQL存储过程开发中十条军规
2015-01-12 15:11 736报表SQL存储过程的特 ... -
CSV文件转换类
2015-01-12 13:01 777/// <summary> /// ... -
最全的日期年农历假日节气星座等计算类封装
2015-01-12 09:27 477/// <summary> /// 农历属 ...
相关推荐
C# 利用SqlBulkCopy 高性能批量插入海量数据 高效批量插入数据
可以方便的将外部数据批量导入、批量合并导入、批量更新导入、批量删除到Sqlserver数据库,基本支持Sqlserver最新的数据库,我用的是Sqlserver2008R2,一点问题没有。共享一下。 需要批量导入数据的同学们,这是福音...
主要介绍了C#使用SqlBulkCopy批量复制数据到数据表的方法,较为详细的讲述了SqlBulkCopy批量复制数据到数据表的原理与实现技巧,需要的朋友可以参考下
Excel导入数据,使用SqlBulkCopy类批量导入数据到数据库。
C# sql实现批量导入数据到数据库里面包含普通的方法、SqlBulkCopy方法、使用表值方式(TVP)插入的三种方法。可以测试看出每个方法的运行时间。
可以方便的将外部数据批量导入、批量合并导入、批量更新导入、批量删除到Sqlserver数据库,基本支持Sqlserver最新的数据库,我用的是Sqlserver2008R2,一点问题没有。共享一下。 需要批量导入数据的同学们,这是福音...
可以方便的将外部数据批量导入、批量合并导入、批量更新导入、批量删除到Sqlserver数据库,基本支持Sqlserver最新的数据库,我用的是Sqlserver2008R2,开发环境vs2010,一点问题没有(这是最新版本,vs2013应该没有...
Sqlserver批量导入数据的示例(SqlBulkCopy),有示例解决方案和说明。
使用C#自带SqlBulkcopy类,批量插入数据库,与一般insert into 插入效率相比,插入速度一个天一个地,效果很明显。特别用在导入大量数据时。
SqlBulkCopy提供了一种将数据复制到Sql Server数据库表中高性能的方法。SqlBulkCopy 包含一个方法 WriteToServer,它用来从数据的源复制数据到数据的目的地。 WriteToServer方法可以处理的数据类型有DataRow[]数组,...
第二种方法使用的是SqlBulkCopy,使您可以用其他源的数据有效批量加载 SQL Server 表;第三种使用的方法是sql server中的表值参数方法,表值参数是 SQL Server 2008 中的新参数类型。表值参数是使用用户定义的表类型...
源码包含有不同方法的添加,第一种逐条添加,第二种批量加入,其批量加实现原理其实就是把数据存入内存表(DataTable)中使用Backcopy一次性加入数据库。添加dll引用即可调用(无脑操作,何况源码里有)添加此对应dll...
Excel导入数据,使用SqlBulkCopy类批量导入数据到数据库。
本文实现在c#中可高效的将excel数据导入到sqlserver数据库中,很多人通过循环来拼接sql,这样做不但容易出错而且效率低下,最好的办法是使用bcp,也就是System.Data.SqlClient.SqlBulkCopy 类来实现。不但速度快,...
4秒100万条数据导入SQL数据库-NET(C#)demo 试验的5种方法,比较各种方法的导入速度 基本Insert Into 单线程Bulk Insert 多线程Bulk Insert 单线程SqlBulkCopy 多线程SqlBulkCopy
SqlBulkCopy SQL2005 批量插入数据 性能优化
C# 使用SqlBulkCopy类批量复制大数据
使用C#自带SqlBulkcopy类,批量插入数据库,与一般insert into 插入效率相比,插入速度一个天一个地,效果很明显。特别用在导入大量数据时。
本程序比较简单,就实现了excel的读取、存入数据库,其实写入数据库用的SqlBulkCopy大数据批量导入 二、菜单功能 页面就实现了两个功能 1、不需要使用数据,直接读取excel并显示出来; 2、读取excel并写入数据库...
C#z中连接数据库的,如有需要可以借,这个开发是项目中必备的的