欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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#程序设计有所帮助。