ASP.NET C#开发Excel导入的功能流程

来源:互联网 发布:淘宝漏洞该包 编辑:程序博客网 时间:2024/06/05 03:13
前提:此项目中,我将所有的上传文件统一存到Upload文件夹中。
(1)//上传文件保存数据库
前台Aspx页面中需要一个FileUpload控件和一个“上传”的button(ImageButton,LinkButton等),页面无需多讲,大家都会的。
上传文件的数据库(NEW_FA_UPLOAD)设计字段:
FileName 上传的原文件名
FileExt 上传文件的扩展名
UserId 上传人的ID(使用Session值)
IpAddress 上传客户端的IP地址
InputDate 上传的时间
NewFileName 上传後形成的新文件名
ContentType 上传文件类型
FileSiz 上传文件的字节大小
IsSuccess 指示是否上传成功
接下来,我将方法封装在CS文件中,以便其它页面调用。方法如下:

//上传文件保存数据库返回文件新名字
    public string UploadFile(FileUpload FileUpload1, string UserId, string IpAddress,string MapPath)
    {
        Stream fileDataStream = FileUpload1.PostedFile.InputStream;
        if (fileDataStream.Length < 1)
        {
            return "";
        }
        else
        {
            //得到文件的扩展名
            if (FileUpload1.PostedFile.FileName.Contains(".xls") == false)//只能上传xls文件
            {
                return "";
            }
            else
            {
                //得到文件大小
                int fileLength = FileUpload1.PostedFile.ContentLength;
                //创建数组
                byte[] fileData = new byte[fileLength];
                //把文件流填充到数组
                fileDataStream.Read(fileData, 0, fileLength);
                //得到文件类型
                string fileType = FileUpload1.PostedFile.ContentType;
                //组成新文件名
                string NewFileName = DateTime.Now.ToString("yyyyMMddhhmmss");
                NewFileName += RandomNum();//RandomNum()是生成4位随机数的方法。
                NewFileName = "Po_" + NewFileName;

                //构建数据库连接,SQL语句,创建参数
                SqlConnection myConnection = new SqlConnection(con);
                SqlCommand command = new SqlCommand("INSERT INTO NEW_FA_UPLOAD" +
                    " (FileName,FileExt,UserId,IpAddress,InputDate,NewFileName,ContentType,FileSize)" +
                    "VALUES (@FileName,@FileExt,@UserId,@IpAddress,@InputDate,@NewFileName,@ContentType,@FileSize)", myConnection);
                string FileName = Path.GetFileNameWithoutExtension(FileUpload1.PostedFile.FileName);
                command.Parameters.AddWithValue("@FileName", FileName);
                string FileExt = Path.GetExtension(FileUpload1.PostedFile.FileName);
                command.Parameters.AddWithValue("@FileExt", FileExt);
                command.Parameters.AddWithValue("@UserId", UserId);
                command.Parameters.AddWithValue("@IpAddress", IpAddress);
                string InputDate = DateTime.Now.ToString();
                command.Parameters.AddWithValue("@InputDate", InputDate);
                command.Parameters.AddWithValue("@NewFileName", NewFileName);
                command.Parameters.AddWithValue("@ContentType", fileType);
                command.Parameters.AddWithValue("@FileSize", fileLength);

                //打开连接,执行查询
                myConnection.Open();
                command.ExecuteNonQuery();
                myConnection.Close();

                //保存到指定目录中
                string path = MapPath + "/upload/" + NewFileName + FileExt;
                FileUpload1.PostedFile.SaveAs(path);

                return NewFileName + FileExt;
            }
        }
    }

(2)将新上传的文件,取出存入数据集,以供客户预览。

//将上传的Excel文件进行预览
public DataSet CreateDataSource(string FileName, string MapPath)//传入文件名(包括扩展名)和路径
    {
        string strCon;
        strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MapPath + "//upload//" + FileName + "; Extended Properties=Excel 8.0;";
        OleDbConnection olecon = new OleDbConnection(strCon);
        OleDbDataAdapter myda = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", strCon);
        DataSet myds = new DataSet();
        myda.Fill(myds);
        return myds;
    }

而后DataSet绑定到GridView或其它东东的方法,我就不多述了。

(3)预览后,客户可以选择导入到MSSQL,也可以取消(删除)上传的文件。
“取消”:

//删除上传文件,同时删除数据库中记录
    public void DeleteFile(string FileName,string MapPath)
    {
        FileInfo fi = new FileInfo(@MapPath + "//upload//" + FileName);
        fi.Delete();
        string[] temp = FileName.Split('.');
        string strSql = "DELETE NEW_FA_UPLOAD WHERE NewFileName = '" + temp[0] + "'";
        ExecuteSql(strSql);
    }

“导入数据库中”,相对比较简单,就是将DataSet数据集,按行读出,执行插入SQL语句即可。

'>><
  
原创粉丝点击