关于批量导入数据类SqlBulkCopy 导入数据时增加额外的列

问题描述

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Diagnostics;usingSystem.Data.SqlClient;usingSystem.Data;namespace样本采购订单{classProgram{staticvoidMain(string[]args){Stopwatchst=newStopwatch();st.Start();stringconnectionString=@"DataSource=192.168.0.20;InitialCatalog=misdb;UserID=sa;Password=123456;Replication=True";stringSqlConnectionStringTarget="DataSource=192.168.0.20;InitialCatalog=Basedb;UserID=sa;Password=123456;Replication=True";//DataTablesourceData=newDataTable();//源using(SqlConnectionsourceConnection=newSqlConnection(connectionString)){//源表查询数据SqlCommandmyCommand=newSqlCommand("select*fromReceDetail",sourceConnection);sourceConnection.Open();SqlDataReaderreader=myCommand.ExecuteReader(CommandBehavior.CloseConnection);//sourceData.Load(reader);//sourceConnection.Close();//目的/**这里用的是同一个连接,**如果不是同一个数据库,则用不同的连接**注意:一定要按照我的连接字符串的格式来写,不然是不行的***/using(SqlConnectionTarget=newSqlConnection(SqlConnectionStringTarget)){//打开连接//Target.Open();using(SqlBulkCopybulkCopy=newSqlBulkCopy(Target.ConnectionString,SqlBulkCopyOptions.UseInternalTransaction)){//源列字段:A,目标数据源字段:BSqlBulkCopyColumnMappingm1=newSqlBulkCopyColumnMapping("ShopCode","ShopName");SqlBulkCopyColumnMappingm2=newSqlBulkCopyColumnMapping("ReceNo","ReceNo");SqlBulkCopyColumnMappingm4=newSqlBulkCopyColumnMapping("TranDate","TranDate");SqlBulkCopyColumnMappingm6=newSqlBulkCopyColumnMapping("RealAmount","RealAmount");SqlBulkCopyColumnMappingm7=newSqlBulkCopyColumnMapping("DiscountType","DiscountType");SqlBulkCopyColumnMappingm8=newSqlBulkCopyColumnMapping("Discount","Discount");SqlBulkCopyColumnMappingm9=newSqlBulkCopyColumnMapping("ReceType","ReceType");SqlBulkCopyColumnMappingm10=newSqlBulkCopyColumnMapping("AccountDiff","AccountName");SqlBulkCopyColumnMappingm12=newSqlBulkCopyColumnMapping("CheckNo","CheckNo");SqlBulkCopyColumnMappingm13=newSqlBulkCopyColumnMapping("Comment","Comment");SqlBulkCopyColumnMappingm16=newSqlBulkCopyColumnMapping("Operator","CreatePerson");SqlBulkCopyColumnMappingm17=newSqlBulkCopyColumnMapping("EnableFlag","DeleteFlag");SqlBulkCopyColumnMappingm18=newSqlBulkCopyColumnMapping("CreateDate","CreateTime");bulkCopy.ColumnMappings.Add(m1);bulkCopy.ColumnMappings.Add(m2);bulkCopy.ColumnMappings.Add(m4);bulkCopy.ColumnMappings.Add(m6);bulkCopy.ColumnMappings.Add(m7);bulkCopy.ColumnMappings.Add(m8);bulkCopy.ColumnMappings.Add(m9);bulkCopy.ColumnMappings.Add(m10);bulkCopy.ColumnMappings.Add(m12);bulkCopy.ColumnMappings.Add(m13);bulkCopy.ColumnMappings.Add(m16);bulkCopy.ColumnMappings.Add(m17);bulkCopy.ColumnMappings.Add(m18);//有多列时类推:/***SqlBulkCopyColumnMappingm1=newSqlBulkCopyColumnMapping("A","B");*bulkCopy.ColumnMappings.Add(m1);***///目标数据表bulkCopy.DestinationTableName="Fina_ReceDetail";//每次更新五条bulkCopy.BatchSize=5;//每更新十条的时候就发出通知bulkCopy.NotifyAfter=10;//下面的函数随时都在监督着这里bulkCopy.SqlRowsCopied+=newSqlRowsCopiedEventHandler(bulkCopy_SqlRowsCopied);bulkCopy.WriteToServer(reader);}Target.Close();}sourceConnection.Close();reader.Close();}Console.WriteLine("这次数据导入共用了:"+st.ElapsedMilliseconds);st.Stop();}staticvoidbulkCopy_SqlRowsCopied(objectsender,SqlRowsCopiedEventArgse){Console.WriteLine("已经有"+e.RowsCopied+"条数据被导入");}}}

我现在有个问题,第一个表导入第二个表的时候,第二个表有一些额外的数据字段,这些数据字段的数据都是按规则生成的!!(比如:现在时间的毫秒数+ReceiveOrder+自动增长列+现在登录的人的姓名)等这样的规则,那如何在导入数据的时候自动增加呢!!

解决方案

本帖最后由 TianMaiCheng 于 2012-06-05 11:10:30 编辑
解决方案二:
自己拼装其他的字段。

时间: 2024-09-09 14:49:57

关于批量导入数据类SqlBulkCopy 导入数据时增加额外的列的相关文章

ASP.NET 2.0数据教程之七十:为DataTable添加额外的列

返回"ASP.NET 2.0数据教程目录" 导言: 当向类型化的数据集(Typed DataSet)添加一个TableAdapter时 ,相应的DataTable的构架已经由TableAdapter的主查询定义好了.比如,如果主 查询返回A, B,C这3个域,那么 DataTable将有对应的3个列A, B,和C.除了主查询 以外,TableAdapter还可以包含其他的查询,可能是返回基于某些参数的数据. 比如,ProductsTableAdapter的主查询返回所有产品的信息,此外

dataset-sql server 存储过程在执行批量导入的时候由于导入的数据量太大报错,有没有优化的方法 ?

问题描述 sql server 存储过程在执行批量导入的时候由于导入的数据量太大报错,有没有优化的方法 ? @dataset xml AS BEGIN SET NOCOUNT ON; begin tran insert into student select src.a.value('./编号[1]','varchar(10)') as Id , src.a.value('./姓名[1]','varchar(10)') as Name , src.a.value('./学号[1]','varch

使用SqlBulkCopy导入数据至MS SQL Server

原文:使用SqlBulkCopy导入数据至MS SQL Server Insus.NET一直使用表类型来数据入MS SQL Server.参考<存储过程参数为DataTable>http://www.cnblogs.com/insus/archive/2012/09/22/2698515.html .今天学习一个SqlBulkCopy来把数据导入MS SQL Server中去.就是这个<读取XML某一节点>http://www.cnblogs.com/insus/p/3778256

求批量插入和更新Excel导入数据高效解决方法~

问题描述 需求:导入Excel(上万条记录),每一行数据对应表(table_product)的一条记录. 导入时先读取Excel,并将数据insert到table_product表,同时insert到记录表,当barcode存在则做update操作.(barcode是Excel中的某一列的值).现有的处理方式很脑残:Action处理: List<String[]> list = new ArrayList<String[]>(); Map<Integer, String[]&

C# 批量插入表SQLSERVER SqlBulkCopy往数据库中批量插入数据

#region 帮助实例:SQL 批量插入数据 多种方法 /// <summary> /// SqlBulkCopy往数据库中批量插入数据 /// </summary> /// <param name="sourceDataTable">数据源表</param> /// <param name="targetTableName">服务器上目标表</param> /// <param nam

oracle 10g数据泵和导入导出性能对比(三)提高IMPDP导入效率的方法

前一段时间在一次迁移中同时用到了数据泵和EXP,发现二者效率的差别还是相当大的.这里通过一个例子简单比较一下. 这篇文章介绍提高IMPDP导入效率的方法. 上面一篇文章的测试中发现IMPDP的导入速度和IMP导入速度相差无几.而Oracle在介绍数据泵的时候,提到IMPDP的导入速度最高是IMP的10倍.不过好在IMPDP还是可以优化调整的,那就是通过设置PARALLEL来提高IMPDP的并行度. SQL> show parameter cpu NAME TYPE VALUE ---------

oracle 10g数据泵和导入导出性能对比(二)IMP和IMPDP导入的区别

前一段时间在一次迁移中同时用到了数据泵和EXP,发现二者效率的差别还是相当大的.这里通过一个例子简单比较一下. 这篇文章比较一下IMP和IMPDP导入的区别. 前面对比了EXP和数据泵的导出,可以看到,数据泵导出速度与直接路径导出相比,速度并没有本质的提高,下面看看数据泵的导入方式与IMP的区别. 导入的DMP文件就用上面导出是得到的结果,先看看IMP的导入速度: $ sqlplus "/ as sysdba" SQL*Plus: Release 10.2.0.3.0 - Produc

Oracle数据泵导出导入与传统导出导入的区别

 估计有不少的朋友不清楚Oracle数据泵导出导入与传统导出导入的区别吧,下面小编为各位介绍一下,有兴趣的朋友不防进入一起参考.   先来看一下Oracle数据泵导出导入例子 1.首先建立目录: create directory 目录名称 as '数据库服务器上的一个目录',如:  create directory 别名 as 'd:\服务器目录名';  将导入或导出的文件放在这个目录下 2.导出及导入 以SID=orcl,导出dmp的账号为test,导入dmp的账号为test为例. 若将数据从

SQL Server 2005和SQL Server 2000数据的相互导入

  1) SQL Server 2000数据导入SQL Server 2005 在SQL Server 2000中,把其数据进行备份,在数据库中点击右键,选择"所有任务"下的"备份数据库",弹出一个对话框,然后点击"添加"按钮,输入对应的数据库备份名称,就可以备份数据了.然后在SQL Server 2005中,在数据库中点击右键,点击"还原数据库",在弹出的对话框中,"常规"的选项卡中,"目标数据