public DataSet ExecleDs(string filenameurl,string table)
    {
         
            string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" +filenameurl+ ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'";
           
            OleDbConnection conn = new OleDbConnection(strConn);            OleDbDataAdapter odda = new OleDbDataAdapter("select * from [Sheet1$]", conn);            DataSet ds = new DataSet();            odda.Fill(ds,table);
      
            return ds;   }  string strpath = FileUpload1.PostedFile.FileName.ToString(); 
        
        //获取Execle文件路径
       string filename = FileUpload1.FileName;
        //获取Execle文件名
       DataSet ds = ExecleDs(strpath,filename);
连接不上exeel,在本机上没问题,在服务器上就有问题了,,服务器已装excel2003

解决方案 »

  1.   


     public DataTable GetExcelData()
            {
                //  HDR=NO 即无字段 
                //   HDR=yes 即有字段,一般默认excel表中第1行的列标题为字段名,如姓名、年龄等 
                //如果您在连接字符串中指定 HDR=NO,Jet OLE DB 提供程序将自动为您命名字段(F1 表示第一个字段,F2 表示第二个字段,依此类推); 
                // IMEX 表示是否强制转换为文本 
                //   Excel 驱动程序读取指定源中一定数量的行(默认情况下为 8 行)以推测每列的数据类型。 
                //如果推测出列可能包含混合数据类型(尤其是混合了文本数据的数值数据时), 
                //驱动程序将决定采用占多数的数据类型,并对包含其他类型数据的单元返回空值。 
                //(如果各种数据类型的数量相当,则采用数值类型。) 
                //Excel 工作表中大部分单元格格式设置选项不会影响此数据类型判断。 
                //可以通过指定导入模式来修改 Excel 驱动程序的此行为。 
                //若要指定导入模式,请在“属性”窗口中将 IMEX=1 添加到 Excel 
                //连接管理器的连接字符串内的扩展属性值中。 
                if (!File.Exists(pathFileName))
                {
                    return null;
                }
                try
                {
                    string _strsql = string.Format("SELECT *  FROM  [Sheet1$] ");//WHERE 状态='1' 
                    string _strConn = string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0} ;Extended Properties='Excel 8.0;HDR=NO'", pathFileName);
                    OleDbConnection conn = new OleDbConnection(_strConn);
                    DataTable dt = new DataTable();                conn.Open();
                    OleDbDataAdapter ada = new OleDbDataAdapter(_strsql, _strConn);
                    ada.Fill(dt);                conn.Close();                return dt;
                }
                catch (Exception)
                {
                    return null;
                }
            }
      

  2.   

    首先要确定d盘下有没有ss.xls这个文件,其实可用d:\\ss.xls看下,或者也有可能你用的是office 2007版的,如果是的话,可能你的数据库连接字符串得稍修修改下了,怎么修改可以网上搜索下
      

  3.   

    一般来说放到服务器上的时候不能用绝对路径的,你应该把excel放到服务器某个目录下,比如说data目录,然后引用的时候用Server.MapPath("data/ss.xls"),这样在服务器会直接映射为对应的物理路径
      

  4.   

    看看这个帖子 你换种方式试试?
    http://kb.cnblogs.com/a/1523479/
      

  5.   

    检查路径是否具有相关操作权限
    用 Excel 的工作簿名称替换 SQL 语句中的 Sheet1
    Server.MapPath("~/")
      

  6.   

    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'";
     using(OleDbConnection OleConn = new OleDbConnection(strConn))
    {
      OleConn.Open();
      String sql = "SELECT * FROM [Sheet1$]";
      OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn);
      DataSet ds= new DataSet();
      OleDaExcel.Fill(ds);
      OleConn.Close();
    }
      

  7.   

    你可以先用代码检查一下的文件夹和文件在不在,以便报出提示,然后再检查连接代码。
    你可以参考
     string filepath = Server.MapPath("App_Data"); //当前文件夹---也可以用指定路径及绝对路径
            string[] file = System.IO.Directory.GetFiles(filepath); //得到文件夹
            foreach (string thisFile in file)
            {
                if (System.IO.File.Exists(thisFile) && System.IO.Path.GetExtension(thisFile).ToLower() == ".xls")  是否存在
                {
                    string olecon = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source= '" + thisFile + "'";
                    OleDbConnection mycon = new OleDbConnection(olecon);
                    mycon.Open();
                    OleDbDataAdapter ODB = new OleDbDataAdapter(oleSQL ,mycon );
                    DataSet myds = new DataSet();
                    ODB.Fill(myds, "Person_XX");
      

  8.   

    if(!File.Exists(fileNames)) 
    {
      Response.Write("<script>alert('服务器磁盘中不存在此备份文件,请检查!');</script>");
    }
      

  9.   

    我正好做过这个,postfile是 缓存文件,FileUpload1.PostedFile.filename 是指你上传的时候 客户端文件的位置。但是一般本机调试的时候存放在vs目录中。
    服务器建议采用另一种方式,即先把文件进行存储后,再操作.再删除。
      

  10.   

    FileUpload1.PostedFile.InputStream 可以获取缓存中的文件。。
    ExecleDs(FileUpload1.PostedFile.InputStream,filename)
      

  11.   

    上边的说的很清楚了,要是还报错,检查文件夹权限。 是否给了 ASPNET 和NETWORK SERVICE
      

  12.   

    1.文件是否存在.
    2.执行该语句的角色(ASPNET)需要是DB的SA.