新手求教:下面代码的目的:在数据库中查询出excel在网站中的路径,然后通过路径调用excel文件,
问题一:我不清楚Sever.MapPath的参数是不是支持变量?如果支持,我这个写法对不对?
问题而:我为了试验能否打开excel(饱含多个worksheet),我把Sever.MapPath部分改写为某个指定的路径:Sever.MapPath("../test/App_Data/海滨矿砂.xls"),但是执行后,在objAdapter1.Fill()处提示“Microsoft Jet 数据库引擎找不到对象'海滨砂矿产量'。请确定对象是否存在,并正确地写出它的名称和路径。”
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                                   "Data Source=" + Server.MapPath("+ excelFilePath +") + ";" +
                                   "Extended Properties=Excel 8.0;";
        OleDbConnection objConn = new OleDbConnection(sConnectionString);
        objConn.Open();
        //Response.Write("<script language=javascript>alert('成功找到excel!!')</script>");
        OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM "+ excelname +"", objConn);
        OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
        objAdapter1.SelectCommand = objCmdSelect;
        DataSet objDataset1 = new DataSet();
        objAdapter1.Fill(objDataset1, excelname);
        GridView1.DataSource = objDataset1.Tables[0].DefaultView;
        GridView1.DataBind();
        objConn.Close();

解决方案 »

  1.   

    ..没法修改帖子
    我后来把MapPath内的参数改为:MapPath("~/App_Data/海滨砂矿.xls"),问题仍旧...
    HELP!!
      

  2.   

    这次我尝试了用变量名作为参数:MapPath(excelname).结果编译到 objConn.Open();一句时提示对象为只读属性,没法更新....
     
      

  3.   

    OleDbCommand   objCmdSelect   =   new   OleDbCommand("SELECT   *   FROM   "+   excelname   +"",   objConn); --------------------------------------------------------------SELECT   *   FROM   "+   excelname   +" ,excelname 应该改成工作表的名称,如[Sheet1$]。
    下面给出我的代码,希望对你有所帮助。
    //......
    string strFileName = FileUpload1.FileName;
    string myPath = Server.MapPath("~/UploadFiles/"); //UploadFiles是上传到的文件夹目录
    string ExcelPath = @"" + myPath + "" + strFileName +""; // 定义Excel文件的连接路径
    string strconn = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = "+ ExcelPath +"; " 
                            + " Extended Properties = &apos;Excel 8.0;HDR=NO;IMEX=1 &apos;"; // 定义Excel的连接字符串
    OleDbConnection Excelconn = new OleDbConnection(strconn); // 创建与Excel的连接
    OleDbDataAdapter ExcelAdapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]",Excelconn); // 创建OleDbDataAdapter对象
    DataSet ExcelDataSet = new DataSet(); // 创建DataSet对象
    ExcelAdapter.Fill(ExcelDataSet,"Table");  // 填充数据
    // ......
      

  4.   

    // 接上贴代码
    GridView1.DataSource   =   objDataset1.Tables["Table"].DefaultView; 
    GridView1.DataBind(); 
    Excelconn.Close();
    // ......
      

  5.   

    //   接上贴代码,不好意思,重新修改一下
    GridView1.DataSource = ExcelDataSet.Tables["Table"].DefaultView;   
    GridView1.DataBind();   
    Excelconn.Close(); 
    //   ......
      

  6.   

    非常感谢crackpot2007,不过我编译的时候提示ExcelAdapter.Fill(ExcelDataSet,excelname);//excelname是我的保存文件名的变量 这条语句“找不ISAM”。
      

  7.   

    string myPath = Server.MapPath("~/App_Data/");  
    excelname = excelname + ".xls";
    string ExcelPath = @"" + myPath + "" + excelname + "";     
    string strconn = "Provider   =   Microsoft.Jet.OLEDB.4.0;   Data   Source   =   " + ExcelPath + ";   "
                                                            + "   Extended   Properties   =   &apos;Excel   8.0;HDR=NO;IMEX=1   &apos;";          OleDbConnection Excelconn = new OleDbConnection(strconn);   
    OleDbDataAdapter ExcelAdapter = new OleDbDataAdapter("SELECT   *   FROM   [sheet1$]", Excelconn);   //   创建OleDbDataAdapter对象 
    DataSet ExcelDataSet = new DataSet();   
    ExcelAdapter.Fill(ExcelDataSet,excelname);            
    GridView1.DataSource = ExcelDataSet.Tables[excelname].DefaultView;
    GridView1.DataBind();
    Excelconn.Close(); 以上是我按照你的方法稍微修改后的代码,经过验证,已经能够正确读取路径,但是,执行时,就出现上面的错误:“找不ISAM”。
    估计是sql语句没有正确执行。
      

  8.   

    to en_c_w :ExcelAdapter.Fill(ExcelDataSet,"Table"); 
    // 这里的"Table"是一个临时数据表对象的名称,你通过下面的方法来创建它是不对的:
    这样读到的是一个文件实体,根本绑定不了Excel里面的数据啊。你按照我给你的代码重新做一遍吧,不需要再定义“excelname”这个东西了,即直接去掉
    excelname   =   excelname   +   ".xls"; 下面我把代码完整写出来吧。
    string strFileName = FileUpload1.FileName; 
    string myPath = Server.MapPath("~/UploadFiles/");   // UploadFiles是上传到的文件夹目录
    string ExcelPath = @"" + myPath + "" + strFileName +"";   // 定义Excel文件的连接路径 
    string strconn = "Provider = Microsoft.Jet.OLEDB.4.0;   Data   Source   =   "+   ExcelPath   +"; " 
    + " Extended Properties = &apos;Excel 8.0;HDR=NO;IMEX=1 &apos;";   // 定义Excel的连接字符串
    OleDbConnection Excelconn = new OleDbConnection(strconn);   // 创建与Excel的连接 
    OleDbDataAdapter ExcelAdapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]",Excelconn); //   创建OleDbDataAdapter对象 
    DataSet ExcelDataSet = new DataSet();   //   创建DataSet对象 
    ExcelAdapter.Fill(ExcelDataSet,"Table");     //   填充数据 
    GridView1.DataSource = ExcelDataSet.Tables["Table"].DefaultView;       
    GridView1.DataBind();       
    Excelconn.Close();   
      

  9.   

    string strFileName = FileUpload1.FileName; 
    不好意思,关于这一句的作用我不太清楚...
      

  10.   

    还有,我的excel工作表的名字是中文...和treeview的节点值对应...请问sql语句这么写:SELECT * FROM [海洋原油产量$]行不?
      

  11.   

    string   strFileName   =   FileUpload1.FileName;   
    不好意思,关于这一句的作用我不太清楚...===================================这一句读取已上传的文件的名称。FileUpload1 是上传控件的名称。