SqlBulkCopy 批量insert

1.获取要插入的数据datatable

/// <summary>
        /// 从FMS取银行信息
        /// </summary>
        /// <returns></returns>
        public void GetBankInfoFromFMS()
        {
            try
            {
                string connectionStr = Tool.GetConnectionStrings("BPMConnection");
                BudgetServerClient client = new BudgetServerClient();
                BankInfoRequest request = new BankInfoRequest();
                request.PageIndex = 0;
                request.PageSize = int.MaxValue;
                var response = client.QueryBankInfo(request);
                if (response != null && response.total > 0 && response.data != null && response.data.Count > 0)
                {
                    //先删除
                    string sql = "delete from BPM_ExternalSupplier_BankInfo";
                    SqlHelper.ExecuteNonQuery(connectionStr, sql);


                    //准备要批量插入的数据
                    DataTable table = new DataTable();
                    table.Columns.Add("ID");
                    table.Columns["ID"].DataType = typeof(Guid);
                    table.Columns.Add("Pkid");
                    table.Columns.Add("BankName");
                    table.Columns.Add("BankNum");
                    table.Columns.Add("Province");
                    table.Columns.Add("Citye");
                    table.Columns.Add("CreateUser");
                    table.Columns.Add("CreateTime");
                    table.Columns.Add("ModifiedUser");
                    table.Columns.Add("ModifiedTime");
                    table.Columns.Add("IsDeleted");
                    table.Columns["IsDeleted"].DataType = typeof(bool);
                    foreach (var item in response.data)
                    {
                        DataRow row = table.NewRow();
                        row["ID"] = Guid.NewGuid();
                        row["Pkid"] = item.Pkid;
                        row["BankName"] = item.BankName;
                        row["BankNum"] = item.BankNum;
                        row["Province"] = item.Province;
                        row["Citye"] = item.Citye;
                        row["CreateUser"] = "xuguanghui";
                        row["CreateTime"] = DateTime.Now;
                        row["ModifiedUser"] = "xuguanghui";
                        row["ModifiedTime"] = DateTime.Now;
                        row["IsDeleted"] = 0;
                        table.Rows.Add(row);
                    }
                    SqlHelper.BulkCopyData(table, connectionStr, "BPM_ExternalSupplier_BankInfo");
                }
            }
            catch (Exception ex)
            {
                Tool.SendErrorNotication("系统错误通知", "从FMS取银行信息GetBankInfoFromFMS方法错误,错误消息:" + ex.Message);
            }
        }

 

2.调用SqlBulkCopy

 /// <summary>
        /// 批量写入
        /// </summary>
        /// <param name="sourceTable">数据源</param>
        /// <param name="connStr">数据库连接串</param>
        /// <param name="destinationTableName">目标表</param>
        public static void BulkCopyData(DataTable sourceTable, string connStr, string destinationTableName)
        {
            SqlBulkCopy sbc = new SqlBulkCopy(connStr, SqlBulkCopyOptions.UseInternalTransaction);
            sbc.BulkCopyTimeout = 5000;
            try
            {
                sbc.DestinationTableName = destinationTableName;
                foreach (DataColumn dc in sourceTable.Columns)
                {
                    sbc.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);
                }
                sbc.WriteToServer(sourceTable);
            }
            catch
            {
                //The SqlBulkCopy object is automatically closed at the end of the using block.
                //可以不写,会自动关闭
                sbc.Close();
            }
            finally
            {
                //The SqlBulkCopy object is automatically closed at the end of the using block.
                //可以不写,会自动关闭
                sbc.Close();
            }
        }

 

posted @ 2017-06-12 09:32  直钩钓鱼  阅读(557)  评论(0编辑  收藏  举报