好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

dy("nrwz");

查看更多关于C#实现SQL批量插入数据到表的方法的详细内容...

  阅读:48次