使用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;
        }

 /// <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;
        }

时间: 2024-11-10 00:07:03

使用SqlBulkCopy类实现导入Excel表格的相关文章

phpexcel导入excel表格

html代码 <form action="{:U('Mall/updExcel')}" method="POST" enctype="multipart/form-data"> //提交form表单到Mall控制器下的upExcel方法中 <div style="float:left;width:41%;"> <div style="float:left;"> <i

php利用PHPExcel类导出导入Excel用法

PHPExcel类是php一个excel表格处理插件了,下面我来给大家介绍利用PHPExcel类来导入与导出excel表格的应用方法,有需要了解的朋友不防参考参考(PHPExcel自己百度下载这里不介绍了). 导出Excel用法 //设置环境变量(新增PHPExcel) 1 set_include_path('.'. PATH_SEPARATOR . Yii::app()->basePath.'/lib/PHPExcel' . PATH_SEPARATOR . 2 3 get_include_p

导入Excel表格(二)

1. 提取session中的数据.并进行分页操作,上传excel表格,保存到临时表格. 初始化临时表格,提交表单,判断状态是否为真,若为真,则启用 导入到数据库 的按钮:为false,让查询的url 和数据 为空,写一个方法到控制器查询数据,把数据保存到临时表格.2. 控制器声明一个列表对象,当session的数据不为空时,用来接收保存在session中的数据,然后计算数据的总条数,实例化实体类对象,封装数据,将得到的数据返回到页面. List<studentVo> listStudentVo

sqlite expert导入excel表格 (包括使用问题、以及把 一个表的数据插入到另一个表中)

一.sqlite导入excel 1.打开要导入的excel --- 另存为(2007版点击左上角OFFICE图标即可找到) --- 保存类型:CSV类型 (提示什么不兼容什么的,一律点确定.) 2.打开sqlite expert ,选择建好的数据库文件(或者是导入的已存在的db文件,或者是自己新建一个.db数据库文件). 右击文件名---选择最后一个import text file(CSV,TSV) 3.(如果没有建过和这个excel名相同的表)右边Destination选择第一项new tab

Java 从数据库中查找信息导入Excel表格中

前端js function Excel (){ //ajax请求 $.ajax({ url : "outPutAboutShopInfo", type : "post", dataType : "json", data:{ "basicShop.shopId" : shopId, "basicShop.shopMemo" : stringType //不方便增加字段所以使用门店的一个"备注&quo

mvc 导入excel表格

<script> $(function () { $("#Attachment").change(function () { var att = $("#Attachment").val(); $("#hid-Attachment").val(att); }); }) </script> @using (Html.BeginForm("ImportExcel", "ProductOrder&q

PL/SQL 导入excel表格到oracle数据表

通过使用PL/SQL 批量查询取数时,将excel中的每一列数据复制黏贴进新建的中间表,黏贴时会有贴歪的情况,也就是某些列会从第二第三行开始插入整列,导致数据乱掉,然后好像又不支持批量删除整列数据,所以一次性导入整张excel表是最佳方法啦. 第一步: 将excel中要插入oracle的数据全部选中:(必须选中,不然导不进数据库) 第二步: 然后另存为:文本文件(制表符分隔)(*.txt) 第三步: 然后进入PL/SQL 选择工具->文本导入器 第四步: 进行文件的选择: 第五步: 选择文件后就

Asp.Net 导入Excel表格

前台页面: <div align="center" style="background-color:Beige"> <table style="width: 576px; border-collapse: separate; text-align: center"> <tr><td>Excel导入SQL数据库</td></tr> <tr> <td style

vue导入excel表格

<Upload ref="upload" :show-upload-list="false" accept=".xls, .xlsx" :before-upload="templateToImport" type="drag" action="/chenfan_refuse/otherRecord/otherRecordExcelImport" style="displa