批量导入

WHY?为什么要有导入数据?

          我觉得,这个问题,完全就是个摆设。。不过还是保持套路的一致性吧。。

          导入,我认为依旧是站在用户体验度的角度去思考问题,当用户要往系统里面输入用户信息等时候,面对几百来条数据,让他一个一个往里面输入,无疑让他剁手,面对这样的程序,人们往往望都不望,所以,为了系统的访问量,还是做一个导入吧,导入还是很简单的,请看下面的demo


HOW?如何做导入功能?

           请看demo:

           下面是我做的一个界面:

            

            点击导入按钮会让下载模板,并且填写要导入的信息,上传文件,导入到数据库中。效果如图:

                                         


           代码实现:

html:

       

<script src="../../JS/import.js"></script>
<h2>导入功能demo

     这是导入按钮:<input id="import" type="button" value="导入" οnclick="showImportFrm()"/></h2>
<div>
    <table id="dg">
    </table>
</div>
<div id="importDiv" style="display: none;">       
        <form id="frmimport" action="/frmInquireGrade/ImportFlowBatch" method="post" enctype="multipart/form-data" style="text-align:center;" >
            <div style="margin-bottom: 50px"></div>
            <div style="margin-bottom: 40px">
                <span>提示:导入前请先下载EXCEL模板 </span><a class="btn-lit" >
               <a href="../../Excel/要导入的信息.xlsx"><div style="color:blue ">点击我下载</div></a>
            </div>
            <div style="margin-bottom: 40px">
                <input id="FileUpload" type="file" name="files" data-options="prompt:'Choose a file...'" />
            </div>
        </form>
    </div>

        其中,可以在文件中增加自己想让用户下载的模板:

        

        需要注意的是:

                 模板中的字段要和数据库中的字段一致,否则会报错。

js:

   

$(function () {
    initTable();
});

//界面的初始化显示
window.onload = function load() {
 

    //给表格绑定数据
    $('#dg').datagrid({
        url: '/frmManageUser/QueryUser',
        width: "100%",
        striped: true, //行背景交换                 
        fitColumns: false,
        idField: 'AssignmentID',
        loadMsg: '正在加载用户的信息...',
        pagination: true,
        singleSelect: false,
        pageList: [10, 20, 30, 40, 50],
        pageSize: 20,
        pageNumber: 1,
        queryParams: {
            searchName: $("#searchName").val()
        },
        columns: [[
                { field: 'ck', checkbox: true, align: 'left', width: 50 },
                { field: 'UserId', title: '姓名', width: 500, hidden: true },
                { field: 'UserName', title: '年级', width: 50, editor: 'text' },
                { field: 'PassWord', title: '班级', width: 50, editor: 'text' },
                { field: 'TeamNum', title: '性别', width: 50, editor: 'text' },              
        ]]


    });

}

//导入弹出框
function showImportFrm() {
    $("#importDiv").css("display", "block");
    $("#importDiv").dialog({
        width: 400,
        height: 200,      
        title: "批量导入",       
        buttons: [{
            id: 'btnAdd',
            text: '添加',
            iconCls: 'icon-add',
            handler: function () {         
                doImport();
            }
        }, {
            id: 'btnCancelAdd',
            text: '取消',
            iconCls: 'icon-cancel',
            handler: function () {
                $("#importDiv").dialog("close");
            }
        }]
    });

}



//导入功能的js
function doImport() {
    var file = ($("#FileUpload").val());
    if (file == "") {
        $.messager.alert('系统提示', '请选择将要上传的文件!');
        return;
    } else {
        var stuff = file.match(/^(.*)(\.)(.{1,8})$/)[3];
        if (stuff != 'xls') {
            $.messager.alert('警告', '文件类型不正确,请选择.xls文件!', 'warning');
            return;
        } else {           
            $('#frmimport').form('submit', {
                url: "/import/ImportFlowBatch",
                onSubmit: function () { },
                success: function (data) {
                    if (data = 'true') {
                        $.messager.show({
                            title: '提示消息',
                            msg: '提交成功',
                            showType: 'show',
                        });
                        $('#dg').datagrid('reload');  // 重新载入当前页面数据  
                        $('#importDiv').window('close'); //关闭窗口 
                    }
                }
            });          
        }
    }
}


controller:

  #region  批量导入+ public bool ImportFlowBatch()
        /// <summary>
        /// 批量导入流程
        /// </summary>
        /// <returns></returns>
        public bool ImportFlowBatch()
        //public JsonResult ImportFlowBatch()
        {
            DataTable table = new DataTable();
            HttpPostedFileBase file = Request.Files["files"];
            string strFileName;
            string strSavePath = "";
            string ClientPath = AppDomain.CurrentDomain.BaseDirectory + "ExcelFile\\UploadFile\\";
            string strPaperId = "sheet1";

            if (file == null || file.ContentLength <= 0)
            {
                ViewBag.error = "文件不能为空";
                return false;
                //return Json(ViewBag);
            }
            else
            {
                string strFilename = Path.GetFileName(file.FileName);
                int intFilesize = file.ContentLength; //获取上传文件的大小(单位是字节)
                string fileEx = System.IO.Path.GetExtension(strFilename); //获取上传文件的扩张名
                string strNoFileName = System.IO.Path.GetFileNameWithoutExtension(strFilename);//获取上传文件的无扩张名
                int Maxsize = 4000 * 1024;//定义上传文件的最大空间大小为4M
                string FileType = ".xls,.xlsx"; //定义上传文件类型

                strFileName = strNoFileName + DateTime.Now.ToString("yyyyMMddhhmmss") + fileEx;
                if (!FileType.Contains(fileEx))
                {
                    ViewBag.error = "文件类型不对,只能导入xls和xlsx格式的文件";
                }
                if (intFilesize >= Maxsize)
                {
                    ViewBag.error = "上传文件超过4M,不能上传";
                }
                //需要引用system.IO.
                strSavePath = Path.Combine(ClientPath, strFileName);
                file.SaveAs(strSavePath);
            }
            ManageUserBLL bll = new ManageUserBLL();
            table = bll.ExcelToDataTable(strSavePath, strPaperId); 
            //注意,如果某一列需要动态的生成guid的话,可以用下面已经注释的代码写
            //table.Columns.Add("RoomID", typeof(string));         
            table.Columns["期数"].ColumnName = "teamNum";
            table.Columns["姓名"].ColumnName = "userName";         
            table.Columns["权限"].ColumnName = "authority";           
            //int roomNum=table.Columns.Count;
            //for (int i = 0; i < table.Rows.Count; i++) {
            //    //*******动态添加Guid********
            //    Guid roomGuid = Guid.NewGuid();
            //    table.Rows[i]["RoomID"] = roomGuid.ToString();
            //    //*************************
            //    //替换
            //    //1、通过汉字查出对应的guid(房间类型、建筑类型)
            //    string buildingname = table.Rows[i]["BuildingID"].ToString();
            //    //根据buildingname查询出对应的buildingid
            //    buildingname = buildingBll.QueryBuildingIDByName(buildingname);  //得到查询的房间信息
            //    //table.Rows[i]["BuildingID"]=listReturnRoom
            //    table.Rows[i]["BuildingID"] = buildingname;
            //    string roomtype = table.Rows[i]["TypeID"].ToString();
            //    //2、替换
            //    roomtype = roomTypeBll.QueryRoomTypeIDByName(roomtype);
            //    table.Rows[i]["TypeID"] = roomtype;
            //}
            //连接数据库
            //MySqlHelper mysqlHelper = new MySqlHelper("server=192.168.22.238;userid=root;password=123;database=basicentity;Character Set=utf8;");
           
            //需要引用using System.Configuration;
            //string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;          
            //MySqlHelper mysqlHelper = new MySqlHelper(connStr);
            //批量导入数据
           int res= MySQLHelper.BulkInsert(table);
           if (res > 0)
           {
               return true;
           }
           else {
               return false;  
           }           
                       
        }
        #endregion


BLL:

 #region +datatabl --ExcelToDataTable-Elsa-2017年1月8日
        public DataTable ExcelToDataTable(string strSavePath, string strSheetName)
        {
            string strConn;
            string strFileType = System.IO.Path.GetExtension(strSavePath);
            if (string.IsNullOrEmpty(strFileType)) return null;

            if (strFileType == ".xls")
                strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strSavePath + ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";
            else
                strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + strSavePath + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";

            OleDbConnection conn = new OleDbConnection(strConn);
            conn.Open();
            OleDbDataAdapter myCommand = new OleDbDataAdapter("select * from [" + strSheetName + "$]", strConn);
            DataSet myDataSet = new DataSet();
            try
            {
                myCommand.Fill(myDataSet, "t_user");
            }
            catch
            {
                throw new Exception("配置文件的Sheet名称配置错误!");
            }
            finally
            {
                if (conn.State == ConnectionState.Open)
                {
                    conn.Close();
                    myCommand.Dispose();
                    conn.Dispose();
                }
            }
            DataTable table = myDataSet.Tables["t_user"].DefaultView.ToTable();
            return table;

        }
#endregion


小结:

       在做导入的过程中,遇到了很多问题,尤其是数据库字段和模板中的字段不对应的问题,还有数据的可用性问题,比如类型的错误等,不过,正是因为这些错误,才能让人成长,在实践的过程中,不要慌,保持一个良好的心态去做,不急功近,如果做不出来,可以先休息一下,之后效率会更高。


        

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值