class Program
{
static volatile bool result;
static void Main(string[] args)
{
DataSet ds = ExportDataSet();
//使用2个线程模拟并发操作
Thread t = new Thread(delegate() { result = Insert(ds); Console.WriteLine(result ? "导入成功" : "导入失败"); });
t.Start();
Thread t1 = new Thread(delegate() { result = Insert(ds); Console.WriteLine(result ? "导入成功" : "导入失败"); });
t1.Start();
Console.ReadLine();
}
/// <summary>
/// 获取数据DataSet
/// </summary>
/// <returns></returns>
static private DataSet ExportDataSet()
{
//局域网的某服务器模拟数据库远程连接
SqlConnection RemoteConn = new SqlConnection("Data Source=192.168.0.183;Initial Catalog=Northwind;User ID=sa;Password=sa");
using (
/*目标表与源表结构并不相同,目标表只包含OrderID、CustomerID、EmployeeID、ShipCountry这四个字段。注意这里字段是区分大小写的,不然SqlBulkCopy的WriteToServer方法会报运行时异常:“给定的 ColumnMapping 与源或目标中的任意列均不匹配”的处理方法。这个地方浪费了我1个小时才发现*/
SqlDataAdapter oda = new SqlDataAdapter("SELECT [OrderID], [CustomerID], [EmployeeID], [ShipCountry] FROM [Northwind].[dbo].[Orders]", RemoteConn))
//如果目标表与源表结构完全一致,则用下面语句即可,msdn的例子也只是这样
//SqlDataAdapter oda = new SqlDataAdapter("SELECT * FROM [Ednoland].[dbo].[Score]", RemoteConn))
{
DataSet ds = new DataSet();
oda.Fill(ds, "Orders");//给定表名
return ds;
}
}
/// <summary>
/// 将DataSet导入远程数据库(未来放在WebService中)
/// </summary>
/// <param name="ds"></param>
/// <returns></returns>
public static bool Insert(DataSet ds)
{
using (SqlConnection sqlconn = new SqlConnection("Data Source=.;Initial Catalog=Northwind;User ID=sa;Password=sa"))
{
sqlconn.Open();
SqlTransaction sqlbulkTransaction = sqlconn.BeginTransaction(IsolationLevel.ReadCommitted);
using (SqlBulkCopy sbc = new SqlBulkCopy(sqlconn, SqlBulkCopyOptions.KeepIdentity, sqlbulkTransaction))
{
sbc.BatchSize = 20000;//20000行每连接
sbc.BulkCopyTimeout = 50;//50秒超时
if (ds.Tables == null || ds.Tables.Count == 0)
return false;
if (ds.Tables.Count == 1)
{
return BulkInsert(sbc, ds.Tables[0], sqlbulkTransaction); ;
}
else
{
bool res = true;
foreach (DataTable dt in ds.Tables)
{
res = BulkInsert(sbc, dt, sqlbulkTransaction);
}
return res;
}
}
}
}
private static bool BulkInsert(SqlBulkCopy sbc, DataTable dt, SqlTransaction sqlbulkTransaction)
{
bool res = true;
try
{
//将DataTable表名作为待导入库中的目标表名
sbc.DestinationTableName = dt.TableName;
//将数据集合和目标服务器库表中的字段对应
for (int i = 0; i < dt.Columns.Count; i++)
{
//sbc.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName);
sbc.ColumnMappings.Add(i,i);//可以避免字段大小写不一致造成无法映射的问题
}
sbc.WriteToServer(dt);
//提交事务
sqlbulkTransaction.Commit();
res = true;
}
catch (SqlException ex)
{
res = false;
sqlbulkTransaction.Rollback();
}
return res;
}
}
分享到:
相关推荐
在IT行业中,数据导入导出是一项基础且重要的任务,特别是在Java开发中。本文将深入探讨如何使用Java进行数据的导入和导出,包括Excel、XML和TXT等常见格式的处理。 首先,我们要理解数据导入导出的核心目的:将...
### Oracle 数据导入导出及常见问题 Oracle 数据库作为企业级数据库管理系统的首选之一,在日常运维工作中,数据的导入导出是一项非常重要的操作。本文将详细介绍如何在 Oracle 中进行数据的导入导出,并针对常见的...
【管家婆A8数据导入工具】是一款专门针对管家婆A8企业管理软件的数据处理工具,它主要功能是帮助用户高效、便捷地将大量的基础资料数据导入到A8系统中,节省了手动输入的时间,提高了工作效率。在企业信息化管理中,...
在IT行业中,数据导入导出Excel是一项常见的任务,特别是在数据分析、报表生成以及系统间的数据交换等领域。本项目可能提供了一种实用的方法来处理这类需求。下面将详细解释相关的知识点。 首先,我们要理解什么是...
帆软填报报表数据导入案例 在本案例中,我们将学习如何使用帆软填报报表将数据从 Excel 导入到报表中。这个过程可以分为六个主要步骤:新建普通报表、添加字段名称、添加控件和设置竖向拓展、添加数据导入和提交...
matlab快速数据导入算法,别傻乎乎的慢慢点数据导入了。
数据导入的关键在于确保数据的准确性和完整性,避免因为格式不兼容或数据错误导致的问题。 接着,我们来看看数据导出。数据导出则是将数据从一个系统或数据库中提取出来,生成文件以供其他应用或用户使用。这可能是...
在导入过程中,用户可以通过导入器的监测功能来查看数据导入的状态和进度,及时发现并解决可能出现的问题。 #### 九、工作实例 手册还提供了一些实际的工作案例,帮助用户更好地理解和应用Analyst’s Notebook导入...
在Oracle数据库管理中,数据导入是一项常见的操作,用于将外部数据加载到数据库中。本实例主要探讨如何使用Oracle的数据导入工具——SQL*Loader,通过控制文件(`.ctl`)来执行这一过程。以下是对"oracle导入表导入...
Access数据导入工具是一款专为Microsoft Access数据库设计的实用软件,旨在简化用户的数据导入与导出过程。Access数据库是Microsoft Office套件的一部分,主要用于管理和存储结构化的数据,如表、查询、窗体、报表等...
OracleIMP 命令是 Oracle 数据库中的一种数据导入工具,但是在使用 IMP 命令导入数据时,经常会碰到乱码问题。这篇文章将从根本上解决了导入数据乱码的根源及解决办法。 IMP 命令是 Oracle 数据库中的一种数据导入...
"如何将测量数据导入CAD中" CAD(Computer-Aided Design,计算机辅助设计)是一种基于计算机的设计工具,广泛应用于建筑、机械、电子、航空航天等多个领域。测量数据是指通过各种测量设备或仪器获取的数据,例如GPS...
"管家婆366++数据导入模版"是一款专为使用管家婆366++财务管理软件的用户设计的工具,旨在简化数据录入过程,提高工作效率。这个模版允许用户批量导入部门、物品等数据,避免了传统方式下逐条手动输入的繁琐步骤,...
【phpcms数据导入导出模块】是针对phpcms V9内容管理系统的一个功能扩展,主要用于方便网站管理员进行数据的批量处理。这个模块的核心在于提供了一种高效、灵活的方式来管理和迁移数据,尤其是在大型网站或者需要...
当使用Sqoop将数据导入Hive时,有时可能会遇到数据不一致的问题,这可能是由于多种原因引起的。本文将深入探讨这个问题,并提供可能的解决方案。 Sqoop是一个用于在关系数据库和Hadoop之间传输数据的工具,它可以...
【管家婆2008数据导入工具】是一款专为管家婆2008财务管理软件设计的数据处理工具,其主要功能是帮助用户将原有数据高效、安全地迁移到新的数据库环境中,或者在不同的管家婆2008系统之间进行数据同步。这款工具经过...
本主题聚焦于如何利用C#处理Excel文件,并将其数据导入到SQL Server数据库中。这一过程通常涉及到两个主要步骤:读取Excel数据和与数据库进行交互。 首先,我们来看C#读取Excel数据的部分。在.NET框架中,可以使用...
DB2 数据导入导出详解 DB2 数据导入导出是数据库管理系统中的一项重要功能,它允许用户将数据从一个数据库迁移到另一个数据库中,或者将数据备份到外部存储设备中。下面是一个详细的 DB2 数据导入导出的教程。 DB2...
数据导入导出是IT行业中一个基础且至关重要的环节,它涉及到数据管理、数据分析以及数据库操作等多个领域。在日常工作中,我们需要频繁地从不同来源获取数据,或将处理后的数据传输到其他系统,这就需要掌握有效的...
AMESim是一款广泛应用于系统仿真领域的软件,其强大的功能使得用户能够对各种工程系统进行建模、分析和优化。...记住,实践是检验真理的唯一标准,多动手操作几次,你就会对AMESim的数据导入和数表管理更加熟练。