java sqlbulkcopy使用,SqlBulkCopy 批量导入数据

本文介绍了如何利用SqlBulkCopy类在Java中进行大量数据的批量导入操作,强调了在导入过程中确保DataTable列顺序与数据库表列顺序一致的重要性,并提供了示例代码展示如何在事务中执行批量导入并处理可能出现的异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SqlBulkCopy 这个类用于数据库大批量的数据传递,通常用于新旧数据库之间的更新。关键的一点是,即使表结构不同,也可以通过表字段或者字段位置建立映射关系,将所需的数据导入到目标数据库

使用事务批量导入数据 ,注:datatable 的列的顺序要和数据库表的列的顺序一致

public bool sqlbulkCopyDT(DataTable sqlbulkCopyDT, string TableName, string strConn)

{

using (SqlConnection conn = new SqlConnection(strConn))

{

conn.Open();

SqlTransaction tran = conn.BeginTransaction();

try

{

if (sqlbulkCopyDT != null && sqlbulkCopyDT.Rows.Count > 0)

{

SqlBulkCopy bulkCopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.CheckConstraints, tran);

bulkCopy.BulkCopyTimeout = 3600;

try

{

bulkCopy.DestinationTableName = TableName;//***代表要插入数据的表名

foreach (DataColumn dc in sqlbulkCopyDT.Columns) //传入上述table

{

bulkCopy.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);//将table中的列与数据库表这的列一一对应

}

bulkCopy.WriteToServer(sqlbulkCopyDT);

bulkCopy.Close();

}

catch (Exception ex)

{

bulkCopy.Close();

tran.Rollback();

return false;

}

}

tran.Commit();

conn.Close();

}

catch (Exception ex)

{

tran.Rollback();

conn.Close();

return false;

}

}

return true;

}

///

/// SqlBulkCopy类的使用,批量更新数据

///

public static void SqlBulkCopyDemo()

{

String connStr = ConfigurationManager.ConnectionStrings["connStr"].ToString();

//从数据库中获得表结构和数据

DataTable student = new DataTable();

SqlDataAdapter adapter = new SqlDataAdapter("select * from student", connStr);

adapter.Fill(student);

//向表中添加数据

DataRow dr;

Random r = new Random();

Stopwatch st = new Stopwatch();

for(int i = 0; i<1000000; i++)//一百万条数据

{//数据表中的列:name,no,age,sex

dr = student.NewRow();

dr[0] = "小花" + i;

dr[1] = 108 + i;

dr[2] = r.Next(9, 40);//这里是因为数据表中有约束,

dr[3] = (i % 2 == 0 ? "男" : "女");//这个也是有约束

student.Rows.Add(dr);

}

SqlBulkCopy bulk = new SqlBulkCopy(connStr);

bulk.DestinationTableName = "student";//设置目标表,这里是数据库中的student表

bulk.ColumnMappings.Add(0, 0);//建立映射关系

bulk.ColumnMappings.Add(1, 1);

bulk.ColumnMappings.Add(2, 2);

bulk.ColumnMappings.Add(3, 3);

st.Start();//开始计时

bulk.WriteToServer(student.GetChanges());

st.Stop();//结束计时

Console.WriteLine("数据插入成功,耗时为:" + st.ElapsedMilliseconds + "毫秒");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值