- 浏览: 40770 次
文章分类
最新评论
平时老是碰到把一批数据插入到数据库。通常的办法是循环一条条插进去,也挺好的挺省事,但是如果数据超过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 694效果图: 接着上次的简单时钟,这次要高级多了,算法更正 ... -
SQL索引一步到位(此文章为“数据库性能优化二:数据库表优化”附属文章之一)
2015-02-04 09:54 379SQL索引在数据库优化中 ... -
SQL中索引的原理1
2015-02-04 09:35 592(一)深入浅出理解索 ... -
怎样提高WebService的性能
2015-02-03 13:51 1802服务器端WebService程序: using Syste ... -
数据库中的数据到C#代码中的数值要注意转换了
2015-01-26 11:03 454如下,从数据库的存储过程传值过去给C#,如果不再转换一次,C# ... -
SQL Server 删除表中重复的记录的方法记录
2015-01-20 08:38 313--delete from [T_SaleConfirmSta ... -
写sql时经常会碰到条件不定的情况,这样的技巧受用无限
2015-01-19 18:03 498写sql时经常会碰到条件不定的情况,好多兄弟都是在哪儿无穷的拼 ... -
SQL Server数据库中时间比较,这样比较准确
2015-01-19 17:56 599SQL数据库中对于时间的精确度比较做的不是很好。有时候是把值当 ... -
ASP.net网站性能提高办法 无意中从网上浏览到了一篇提高网站性能的帖子转来学习下。
2015-01-16 13:42 508ASP.net网站性能提高办法 无意中从网上浏览到了一篇提高网 ... -
asp.net创建缩略图
2015-01-16 12:01 371记录一个保存缩略图通用的函数。 + View C ... -
让ADO.NET Entity Framework支持Oracle数据库 好东西收藏了
2015-01-16 11:35 507项目需要基于.NET平台,个人的习惯是能用微软自带的就不用第三 ... -
数据库中事务使用实例
2015-01-16 11:18 8201.数据库的事务很重要,在保持数据一致性有很大的用处 US ... -
使用SqlBulkCopy导入大数据要注意
2015-01-13 14:17 551第一次用挺好,第二次就出问题了:我的表里边已经有数据,而且加了 ... -
不要让你的错误处理把错误给吃了,千万注意不然费时费力
2015-01-13 10:48 580开发中老鸟总是说你的程序怎么不够友好,都不加错误处理,给用户报 ... -
SQL Server中查看那个进程阻塞数据库的存储过程,收藏了
2015-01-13 10:20 1716use master go alter procedu ... -
SQL Server类型与C#类型对应关系 好东西收藏了
2015-01-13 09:14 1563SQL Server类型 C#类型 bit bool tiny ... -
asp.net 中URL 编码窗体数据无效提示错误处理记录
2015-01-12 15:50 756一个系统,其他用户都没有问题,就是一个用户说报错 后来查 ... -
报表SQL存储过程开发中十条军规
2015-01-12 15:11 788报表SQL存储过程的特 ... -
CSV文件转换类
2015-01-12 13:01 817/// <summary> /// ... -
最全的日期年农历假日节气星座等计算类封装
2015-01-12 09:27 546/// <summary> /// 农历属 ...
相关推荐
本主题聚焦于如何利用C#处理Excel文件,并将其数据导入到SQL Server数据库中。这一过程通常涉及到两个主要步骤:读取Excel数据和与数据库进行交互。 首先,我们来看C#读取Excel数据的部分。在.NET框架中,可以使用...
本主题聚焦于使用C#编程语言实现Excel数据的高效导入到SQL数据库的过程,这在数据库管理、数据分析以及报表生成等场景下非常实用。下面我们将详细探讨这个过程涉及的关键知识点。 首先,要实现这一功能,我们需要对...
批量插入数据库的方法可以显著提高数据导入的效率,避免了单条插入时的频繁交互,减少了网络延迟和数据库事务开销。在C#中,我们可以利用ADO.NET或Entity Framework等库来实现这一功能。 1. **ADO.NET批量插入**: ...
"Excel导入导出"是数据操作中的常见操作,尤其是当需要处理大量数据,或者从Excel表格转换到结构化的数据库系统时。本篇文章将深入探讨如何将数据从Excel文件导入到Sql Server数据库中。 首先,我们需要理解Excel和...
总结来说,使用WInform程序将Excel导入SQL Server数据库涉及多个步骤,包括设计用户界面、读取Excel、建立数据库连接、数据转换、批量插入和异常处理。这个过程需要对.NET编程、Excel操作以及SQL Server管理有深入的...
7. **执行数据导入**:调用SqlBulkCopy的WriteToServer方法,开始将数据导入数据库。 8. **关闭连接**:操作完成后,记得关闭数据库连接以释放资源。 在存储过程中,可以使用T-SQL语句批量插入数据,比如`INSERT ...
标题 "从客户端导入Excel到SQL数据库 C#源码下载" 提供了主要的知识点,即使用C#编程语言实现从Excel文件中读取数据并将其导入到SQL Server数据库的功能。这个过程通常涉及到文件I/O操作、数据处理以及数据库交互。 ...
总的来说,通过C#实现Excel导入数据库的功能,涉及到的关键技术包括:Excel文件的读取(如EPPlus库的使用)、数据库连接(ADO.NET)、数据转换(DataTable)以及数据批量导入(SqlBulkCopy)。这一过程既需要对C#...
在IT行业中,将Excel表格数据导入SQL数据库是一项常见的任务,特别是在数据分析、报表生成或系统集成等领域。本项目涉及使用C#编程语言编写一个窗体应用程序,实现从Excel表格批量更新到SQL数据库的功能。以下是关于...
接下来,要将读取的数据导入数据库,你需要使用ADO.NET,它是.NET Framework中的数据库访问技术。创建数据库连接,使用SqlCommand执行INSERT语句,或者使用SqlBulkCopy类批量插入数据。例如: ```csharp using ...
- 对于大量数据,考虑使用`SqlBulkCopy`类,它可以高效地批量导入数据。 3. **处理单个TXT文件**: - 单个TXT文件的处理相对简单,直接读取并导入即可。 - 通常,VB程序会打开文件,读取每一行,然后将数据转化...
在这个特定的项目中,"asp.net Excel导入SQLserver源码" 提供了一个功能,即从Excel文件批量导入数据到SQL Server 2000数据库中。这是一个常见的需求,特别是在数据迁移、数据处理或数据分析场景中。 在BS(Browser...
可以使用OpenXML SDK或者Microsoft.Office.Interop.Excel来读取Excel文件,然后创建SqlDataAdapter和DataSet,通过DataTable对象将数据加载到DataSet,最后使用SqlBulkCopy类批量插入到SQL Server数据库中。...
标题 "C#+EXCEL导入数据库SQLserver 2005" 涉及的主要知识点是使用C#编程语言与Microsoft SQL Server 2005数据库进行交互,特别是将Excel文件中的数据导入到SQL Server数据库中。这个过程通常涉及到以下几个关键步骤...
- 编写SQL命令(INSERT语句)来插入数据,或者使用`SqlBulkCopy`类进行批量导入,后者在大量数据导入时更有效率。 例如: ```csharp using (SqlConnection connection = new SqlConnection(connectionString)) { ...
在ASP.NET中,处理Excel文件导入到SQL数据库是一项常见的任务,尤其在数据处理、数据分析或者系统集成场景下。本文将详细讲解如何实现这个过程,包括支持.xlsx和.xls这两种不同的Excel文件格式。 首先,我们需要...
例如,可以使用`XmlReader`配合`SqlBulkCopy`进行批量导入,或者使用`DataTable`和`DataSet`将XML数据映射到表格结构,再进行数据库操作。 2. **数据库到XML的导出**: 反向操作是将数据库中的数据导出为XML格式。...
在ASP.NET中,处理Excel文件是常见的需求之一,特别是当你需要从用户上传的Excel文件中批量导入数据到数据库时。这个场景在企业级应用中非常普遍,例如员工信息管理、订单处理、库存控制等。本文将详细介绍如何在ASP...
在Asp.net开发环境中,Excel数据的导入是一项常见的任务,特别是在需要从电子表格批量导入数据到数据库时。这里我们将深入探讨如何在Asp.net中实现Excel数据的导入,并将其存储到SQL Server 2005数据库中。 首先,...
SqlBulkCopy类提供了批量插入功能,其速度远超常规的逐行插入,特别适合于大数据量的导入操作。使用时,你需要创建SqlBulkCopy实例,设置目标表名、列映射等属性,然后调用WriteToServer方法将数据写入数据库。 2. ...