首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > IIS >

IIS7 停上传读取Excel 表格数据,并添加到数据库

2013-09-05 
IIS7 下上传读取Excel 表格数据,并添加到数据库asp:ScriptManager IDScriptManager1 runatserver

IIS7 下上传读取Excel 表格数据,并添加到数据库
IIS7 停上传读取Excel 表格数据,并添加到数据库


<asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <div>
                <radU:RadProgressManager ID="RadProgressManager1" Width="100%" Height="37" runat="server" />
                <radU:RadProgressArea ID="RadProgressArea1" runat="server">
                </radU:RadProgressArea>
                <asp:FileUpload ID="FileUpload1" runat="server" />&nbsp;&nbsp;
                <asp:Button ID="btnUpload" runat="server" Text="上  传" OnClientClick="javascript:return checkTime()"
                    OnClick="btnUpload_Click" />
                <asp:Label ID="lblMessage" runat="server" Visible="False" Font-Bold="True" ForeColor="#009933"></asp:Label>
            </div>
        </ContentTemplate>
        <Triggers>
            <asp:PostBackTrigger ControlID="btnUpload" />
        </Triggers>
    </asp:UpdatePanel>


  #region 连接Excel  读取Excel数据   并返回DataSet数据集合
    /// <summary>
    /// 连接Excel  读取Excel数据   并返回DataSet数据集合
    /// </summary>
    /// <param name="filepath">Excel服务器路径</param>
    /// <param name="tableName">Excel表名称</param>
    /// <returns></returns>
    public static System.Data.DataSet ExcelSqlConnection(string filepath, string tableName, string isXls)


    {
        //    string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties='Excel  "

        //+ " 8.0;HDR=YES;IMEX=1'";
        string strCon = "";
        if (isXls == ".xls")
        {
            strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties="Excel "
        + "8.0;HDR=Yes;IMEX=2"";
        }
        else if (isXls == ".xlsx")
        {
            strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Extended Properties="Excel "

+ "12.0;HDR=Yes;IMEX=2"";
        }
        OleDbConnection ExcelConn = new OleDbConnection(strCon);
        try
        {
            ExcelConn.Open();
            DataTable dtExcelSchema = ExcelConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
            string SheetName = "";
            for (int i = 0; i < dtExcelSchema.Rows.Count; i++)
            {
                SheetName = dtExcelSchema.Rows[i]["TABLE_NAME"].ToString();
            }

            //string strCom = string.Format("SELECT * FROM [Sheet1$]");
            string strCom = string.Format("SELECT * FROM [" + SheetName + "]");

            OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, ExcelConn);


            DataSet ds = new DataSet();
            myCommand.Fill(ds, "[" + tableName + "$]");
            ExcelConn.Close();
            return ds;
        }
        catch
        {

            ExcelConn.Close();
            return null;
        }
    }
    #endregion

 #region 导入的execl
    protected void btnUpload_Click(object sender, EventArgs e)
    {
        foreach (UploadedFile file in RadUploadContext.Current.UploadedFiles)
        {
            string IsXls = System.IO.Path.GetExtension(file.FileName).ToString().ToLower();
            if (IsXls != ".xls" && IsXls != ".xlsx")
            {
                Response.Write("<script>alert('只可以选择Excel文件')</script>");
                return;//当选择的不是Excel文件时,返回
            }
            string fullname = file.FileName.ToString();//获得当前图片的名字
            string typ2 = fullname.Substring(fullname.LastIndexOf(".") + 1);//获取图片的类型 后缀名字
            string da = Guid.NewGuid().ToString();
            string wjm = da + "." + typ2;// 图片的名字 DateRndName()得到的是上传的时间
            string st = Request.PhysicalApplicationPath;

            //保存
            file.SaveAs(st + "UploadFiles\" + wjm, true);


            DataSet ds = ExcelSqlConnection(st + "UploadFiles\" + wjm, fullname, IsXls);           //调用自定义方法
            DataRow[] dr = ds.Tables[0].Select();            //定义一个DataRow数组
            int rowsnum = ds.Tables[0].Rows.Count;
            if (rowsnum == 0)
            {
                Response.Write("<script>alert('Excel表为空表,无数据!')</script>");   //当Excel表为空时,对用户进行提示

            }
            else
            {
                try
                {
                    for (int i = 2; i < dr.Length - 1; i++)
                    {
                        string fnbm = DBHelper.ToBj(dr[i][2].ToString());
                        string fnxm = dr[i][0].ToString();
                        string fnsfhm = DBHelper.ToBj(dr[i][1].ToString());


                        string sql_add = "insert into ceshi(fnbm,fnxm,fnsfhm)values(@fnbm,@fnxm,@fnsfhm)";
                        SqlParameter[] sp = new SqlParameter[3];
                        sp[0] = new SqlParameter("@fnbm", fnbm);


                        sp[1] = new SqlParameter("@fnxm", fnxm);
                        sp[2] = new SqlParameter("@fnsfhm", fnsfhm);
                        try
                        {
                            DBHelper.ExecuteNonQuery(CommandType.Text, sql_add, sp);
                        }
                        catch (MembershipCreateUserException ex)//捕捉异常
                        {
                            Response.Write("<script>alert('导入内容:" + ex.Message + "')</script>");
                        }
                    }
                    Response.Write("<script>alert('Excle表导入成功!')</script>");
                }
                catch (Exception ex)
                {
                    Response.Write("<script>alert('表:" + ex.Message + "')</script>");
                    return;
                }
            }


        }
    }
    #endregion



唉,在IIS6下边好好的,为啥到7下边就白搭了呢?程序池托管管道我也设置成经典了
咋回事?求指导。。。 IIS7,上传??RadUpload
[解决办法]
先看一下你的发布后网站的上传到的文件 夹的权限问题,如果权限没问题的话,再看一下路径是否正确了?
[解决办法]
另看你写的程式似乎有些问题, if (isXls == ".xls")         {             strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties="Excel "        + "8.0;HDR=Yes;IMEX=2"";         }         else if (isXls == ".xlsx")         {             strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Extended Properties="Excel "  + "12.0;HDR=Yes;IMEX=2"";         } 这个判定感觉有些不认同,Microsoft.Jet.OLEDB.4.0还是Microsoft.ACE.OLEDB.12.0不是文件类型不同,才调用不同,而是如果系统是32位则用4.0那个如果是64位则用12.0的那个。
[解决办法]
jet.oledb //这是access2003
ace.oledb //access2007
--------------------------------
这是常识哦
[解决办法]
如2楼所说,楼主代码中的条件判断是不对的。
JET4.0引擎只有32位的版本;ACE12.0引擎虽然有32位和64位两种版本,但是一台机器上只能选择一种安装。
其实楼主可以抛弃JET引擎,在代码中对xls和xlsx都用ACE引擎。如果你的网站是32位的,就装32位的ACE;如果是64位的,就装64位的ACE。
如果无法判断网站会被安装成32位还是64位,那可以把32位的JET和64位的ACE都装上(对64位操作系统)。然后仍然使用条件判断使用哪个引擎,但是条件要变成判断当前进程是32位的还是64位的。这个判断在.net4.0及以上可以通过Environment.Is64BitProcess来搞定。如果低于.net4.0,可以检查IntPtr.Size是4(32位)还是8(64位)。

热点排行