C#实现SQL批量插入数据到表的方法
程序员文章站
2023-02-22 20:28:09
本文实例讲述了c#实现sql批量插入数据到表的方法。分享给大家供大家参考,具体如下:
#region 帮助实例:sql 批量插入数据 多种方法
/// <...
本文实例讲述了c#实现sql批量插入数据到表的方法。分享给大家供大家参考,具体如下:
#region 帮助实例:sql 批量插入数据 多种方法 /// <summary> /// sqlbulkcopy往数据库中批量插入数据 /// </summary> /// <param name="sourcedatatable">数据源表</param> /// <param name="targettablename">服务器上目标表</param> /// <param name="mapping">创建新的列映射,并使用列序号引用源列和目标列的列名称。</param> public static void bulktodb(datatable sourcedatatable, string targettablename, sqlbulkcopycolumnmapping[] mapping) { /* 调用方法 -2012年11月16日编写 //datatable dt = get_all_roomstate_byhid(); //sqlbulkcopycolumnmapping[] mapping = new sqlbulkcopycolumnmapping[4]; //mapping[0] = new sqlbulkcopycolumnmapping("xing_h_id", "xing_h_id"); //mapping[1] = new sqlbulkcopycolumnmapping("h_name", "h_name"); //mapping[2] = new sqlbulkcopycolumnmapping("h_sname", "h_sname"); //mapping[3] = new sqlbulkcopycolumnmapping("h_ename", "h_ename"); //bulktodb(dt, "bak_tts_hotel_name", mapping); */ sqlconnection conn = new sqlconnection(sqlhelper.connectionstring); sqlbulkcopy bulkcopy = new sqlbulkcopy(conn); //用其它源的数据有效批量加载sql server表中 bulkcopy.destinationtablename = targettablename; //服务器上目标表的名称 bulkcopy.batchsize = sourcedatatable.rows.count; //每一批次中的行数 try { conn.open(); if (sourcedatatable != null && sourcedatatable.rows.count != 0) { for (int i = 0; i < mapping.length; i++) bulkcopy.columnmappings.add(mapping[i]); //将提供的数据源中的所有行复制到目标表中 bulkcopy.writetoserver(sourcedatatable ); } } catch (exception ex) { //throw ex; common.writetextlog("bulktodb", ex.message); } finally { conn.close(); if (bulkcopy != null) bulkcopy.close(); } } /// <summary> /// sql2008以上方可支持自定义表类型 :调用存储过程游标-往数据库中批量插入数据 ,注意 /// </summary> /// <param name="sourcedatatable"></param> public void datatabletohoteldb(datatable sourcedatatable) { /* -2012年11月15日编写 alter procedure [dbo].[p_insertsubject] @tempstudentid int as declare rs cursor local scroll for select h_id from tts_hotel_name open rs fetch next from rs into @tempstudentid while @@fetch_status = 0 begin insert student (tempstudentid) values (@tempstudentid) fetch next from rs into @tempstudentid end close rs * *************************************************************** * create table orders ( orders_id int identity(1,1) primary key, itemcode nvarchar(50) not null, um nvarchar(20) not null, quantity decimal(18,6) not null, unitprice decimal(18,6) not null ) --创建用户自定义表类型,在可编程性->类型性->用户自定义表类型 create type orderstabletype as table ( itemcode nvarchar(50) not null, um nvarchar(20) not null, quantity decimal(18,6) not null, unitprice decimal(18,6) not null ) go create procedure pro_orders ( @orderscollection orderstabletype readonly ) as insert into orders([itemcode],[um],[quantity],[unitprice]) select oc.[itemcode],oc.[um],[quantity],oc.[unitprice] from @orderscollection as oc; go * */ sqlparameter[] parameters = {new sqlparameter("@orderscollection", sqldbtype.structured)}; parameters[0].value = sourcedatatable; new sqlhelper().executescalar("p_datatable_tohoteldb", parameters, true); } #endregion
更多关于c#相关内容感兴趣的读者可查看本站专题:《c#数据结构与算法教程》、《c#常见控件用法教程》、《c#面向对象程序设计入门教程》及《c#程序设计之线程使用技巧总结》
希望本文所述对大家c#程序设计有所帮助。
上一篇: 你觉得这些人中,哪个是汽车的主人?