使用SqlBulkCopy类实现导入Excel表格

对于C#Execl数据的导入导出大家不感到陌生,这是一个项目中经常回遇到的功能,今天在这里讲的事,使用SqlBulkCopy类实现导入Excel大批量的数据导入。

/// <summary>  
/// 数据库对应表  
/// </summary>  
/// <returns></returns>  
        private static DataTable GetDeliveryOrderTable()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("ShipperID", typeof(string));
            dt.Columns.Add("ConsigneeProvince", typeof(string));
            dt.Columns.Add("ConsigneeName", typeof(string));
            dt.Columns.Add("ConsigneeContact", typeof(string));
            dt.Columns.Add("ConsigneeAddress", typeof(string));
            dt.Columns.Add("ConsigneeMobile", typeof(string));
            dt.Columns.Add("ShipperName", typeof(string));
            dt.Columns.Add("TransportDate", typeof(DateTime));
            dt.Columns.Add("PlanEndDate", typeof(DateTime));
            dt.Columns.Add("EndDate", typeof(DateTime));
            dt.Columns.Add("Status", typeof(string));
            dt.Columns.Add("CheckStatus", typeof(string));
            dt.Columns.Add("OrderSource", typeof(string));
            dt.Columns.Add("Creator", typeof(string));
            dt.Columns.Add("Creator_ID", typeof(string));
            dt.Columns.Add("CreateTime", typeof(DateTime));
            return dt;
        }
View Code
 /// <summary>
        /// 保存数据
        /// </summary>
        bool ExcelData_OnDataSave(DataRow dr)
        {
            bool IsRead = false;
            DeliveryOrderInfo doi_info = new DeliveryOrderInfo();//运单表

            //实例化一个和数据库一样的DataTable 
            DataTable dt_DeliveryOrder = GetDeliveryOrderTable();
            DataRow dr_DeliveryOrder = dt_DeliveryOrder.NewRow();
            dr_DeliveryOrder["ShipperID"] = dr["发运单号"].ToString();
            dr_DeliveryOrder["ConsigneeProvince"] = dr["省份"].ToString();
            dr_DeliveryOrder["ConsigneeContact"] = dr["收货人"].ToString();
            dr_DeliveryOrder["ConsigneeAddress"] = dr["地址"].ToString();
            dr_DeliveryOrder["ConsigneeMobile"] = dr["联系电话"].ToString();
            dr_DeliveryOrder["ShipperName"] = dr["货运部"].ToString();
            dr_DeliveryOrder["TransportDate"] = Convert.ToDateTime(dr["发运日期"]);
            dr_DeliveryOrder["PlanEndDate"] = Convert.ToDateTime(dr["预计到货日期"]);
            dr_DeliveryOrder["EndDate"] = Convert.ToDateTime(dr["实际到货日期"]);
            dr_DeliveryOrder["Status"] = "在途中";
            dr_DeliveryOrder["CheckStatus"] = "未审核";
            dr_DeliveryOrder["OrderSource"] = "批量导入";
            dt_DeliveryOrder.Rows.Add(dr_DeliveryOrder);//运单表
                
                if (deliveryOrderInfo == null)//判断是否有重复发运单号
                {
                    #region MyRegion
                    if (dt_DeliveryOrder != null && dt_DeliveryOrder.Rows.Count > 0)
                    {
                        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlserver"].ConnectionString))
                        {
                            conn.Open();
                            using (SqlTransaction trans = conn.BeginTransaction())
                            {
                                #region try
                                try
                                {
                                    using (SqlBulkCopy bulk = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, trans))
                                    {
                                        //设置每一批次中的行数。在每一批次结束时,将该批次中的行发送到服务器。  
                                        bulk.BatchSize = 1000;
                                        //设置服务器上目标表的名称  
                                        bulk.DestinationTableName = "TMS_DeliveryOrder";
                                        //已重载。将所有行从数据源复制到SqlBulkCopy对象的DestinationTableName属性指定的目标表中。  
                                        bulk.WriteToServer(dt_DeliveryOrder);
                                        IsRead = true;
                                        trans.Commit();
                                    }
                                }
                                catch (Exception ex)
                                {
                                    Console.Write(ex.Message);
                                    IsRead = false;
                                    trans.Rollback();
                                }
                                finally
                                {
                                    conn.Close();
                                }
                                #endregion
                            }
                        }
                    }
                    #endregion
                }

                
            return success;
        }
View Code

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。