C# 數據批量插入到數據庫SqlBulkCopy(源數據類型:List Or DataTable)


     /*_____________________ List<T>類型數據 To Sql_______________________________*/

   /// <summary>
        /// Sqlbulkcopies the specified SMS.批量插入到數據庫
        /// </summary>
        /// <param name="data">list類型數據.</param>
        /// <param name="sqlconn">數據庫連接字符串.</param>
        private void Sqlbulkcopy(List<T> data, SqlConnection sqlconn)
        {
            #region 待處理數據初始化處理
            List<PropertyInfo> pList = new List<PropertyInfo>();//創建屬性的集合
            DataTable dt = new DataTable();
            //把所有的public屬性加入到集合 並添加DataTable的列    
            Array.ForEach<PropertyInfo>(typeof(T).GetProperties(), p => { pList.Add(p); dt.Columns.Add(p.Name, p.PropertyType); });  //獲得反射的入口(typeof()) //要對 array 的每個元素執行的 System.Action。
            foreach (var item in data)
            {
                DataRow row = dt.NewRow(); //創建一個DataRow實例  
                pList.ForEach(p => row[p.Name] = p.GetValue(item, null)); //給row 賦值
                dt.Rows.Add(row); //加入到DataTable    
            }
            #endregion
            #region 批量插入數據庫 SqlBulkCopy聲明及參數設置
            SqlBulkCopy bulk = new SqlBulkCopy(sqlconn.ToString(), SqlBulkCopyOptions.UseInternalTransaction) { DestinationTableName = "TableName" /*設置數據庫目標表名稱*/, BatchSize = dt.Rows.Count /*每一批次中的行數*/ };
           bulk.ColumnMappings.Add("ID", "ID"); //設置數據源中的列和目標表中的列之間的映射關系
            bulk.ColumnMappings.Add("name", "name");//ColumnMappings.Add("源數據表列名稱", "目標表數據列名稱");
            bulk.ColumnMappings.Add("sex", "sex");
            bulk.ColumnMappings.Add("phone", "phone");  

    .

    .

    .
            #endregion
            bulk.WriteToServer(dt);
            if (bulk != null)
            {
                bulk.Close();
            }
        }

  /*_____________________ DataTable類型數據 To Sql_______________________________*/

     /// <summary>
        /// Sqlbulkcopies the specified SMS.批量插入到數據庫
        /// </summary>
        /// <param name="dt">DataTable類型帶插入數據</param>
        /// <param name="sqlconn">數據庫連接字符串</param>
        private void Sqlbulkcopy(DataTable dt, SqlConnection sqlconn)
        {
            #region 批量插入數據庫 SqlBulkCopy聲明及參數設置
            SqlBulkCopy bulk = new SqlBulkCopy(sqlconn.ToString(), SqlBulkCopyOptions.UseInternalTransaction) { DestinationTableName = "ENG_FailSendSMS" /*設置數據庫目標表名稱*/, BatchSize = dt.Rows.Count /*每一批次中的行數*/ };
            bulk.ColumnMappings.Add("ID", "ID"); //設置數據源中的列和目標表中的列之間的映射關系
            bulk.ColumnMappings.Add("name", "name");//ColumnMappings.Add("源數據表列名稱", "目標表數據列名稱");
            bulk.ColumnMappings.Add("sex", "sex");
            bulk.ColumnMappings.Add("phone", "phone");  

    .

    .

    .
          
            #endregion
            bulk.WriteToServer(dt);
            if (bulk != null)
            {
                bulk.Close();
            }
        }

補充:SqlBulkCopy ColumnMappings 映射列名是敏感大小寫的!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM