• SQL: C# 批量插入表


     #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
  • 相关阅读:
    百度影音盒插入论坛帖子自动播放代码及方法
    vFloppy1.5-虚拟启动软盘
    飞秋的实现原理
    博客盈利请先考虑这七点
    下载站运行广告合作exe文件然后再运行程序文件的bat
    木马病毒是什么以及手工清除木马病毒具体步骤
    网站盈利模式分析分类
    软件更新原理
    浅析php学习的路线图
    网页常用分享代码大全(前端必备)
  • 原文地址:https://www.cnblogs.com/Fooo/p/3011635.html
Copyright © 2020-2023  润新知