Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在asp.net C中上载xls格式文件时出错#_C#_Asp.net_Excel - Fatal编程技术网

C# 在asp.net C中上载xls格式文件时出错#

C# 在asp.net C中上载xls格式文件时出错#,c#,asp.net,excel,C#,Asp.net,Excel,我想上传.xls和.xlsx格式文件.xlsx格式工作正常,但在上载.xls时,我发现错误如下: 外部表不是预期的格式 这是我试过的代码 if (fluploadData.HasFile) { string filename = Path.GetFileName(fluploadData.FileName); // FileUpload.SaveAs(Server.MapPath("~/") + filename); string fil

我想上传
.xls
.xlsx
格式文件
.xlsx
格式工作正常,但在上载
.xls
时,我发现错误如下:

外部表不是预期的格式

这是我试过的代码

if (fluploadData.HasFile)
    {

        string filename = Path.GetFileName(fluploadData.FileName);
        // FileUpload.SaveAs(Server.MapPath("~/") + filename);
        string filenamewithoutrext = string.Empty;
        FileExt = Path.GetExtension(fluploadData.FileName).ToLower();
        if (Path.GetExtension(fluploadData.FileName).ToLower() != ".xls" &&
            Path.GetExtension(fluploadData.FileName).ToLower() != ".xlsx"
        )
        {

            Response.Write("Only .xls, .xlsx are allowed.!");
            return;
        }

        filenamewithoutrext = Path.GetFileNameWithoutExtension(fluploadData.FileName).ToLower();

        string path = Server.MapPath("UploadData\\");
        string filename_ = filenamewithoutrext;

        //   DeleteDirectory(path);
        if (!Directory.Exists(path))   // CHECK IF THE FOLDER EXISTS. IF NOT, CREATE A NEW FOLDER.
        {
            Directory.CreateDirectory(path);
        }
        else
        {
            foreach (string file in Directory.GetFiles(path))
            {
                File.Delete(file);
            }
        }

        string fname;
        fname = path + filename_ + ".xls";

        fluploadData.SaveAs(fname);
        HttpContext.Current.Session["ExcelFilePath"] = fname;

        string conStr = "";
        System.Data.DataTable dtExcelRows = new System.Data.DataTable();

        switch (FileExt)
        {
            case ".xls": //Excel 97-03
                conStr = System.Configuration.ConfigurationManager.ConnectionStrings["Excel03ConString"].ConnectionString;
                break;
            case ".xlsx": //Excel 07
                conStr = System.Configuration.ConfigurationManager.ConnectionStrings["Excel07ConString"].ConnectionString;
                break;
        }

        conStr = String.Format(conStr, fname, "YES");

        System.Data.OleDb.OleDbConnection connExcel = new System.Data.OleDb.OleDbConnection(conStr);
        System.Data.OleDb.OleDbCommand cmdExcel = new System.Data.OleDb.OleDbCommand();
        System.Data.OleDb.OleDbDataAdapter oda = new System.Data.OleDb.OleDbDataAdapter();
        cmdExcel.Connection = connExcel;


        connExcel.Open(); // here is coming the error

        System.Data.DataTable dtExcelSchema = connExcel.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
        System.Data.DataTable dtExcelColumnsTable = connExcel.GetSchema("Columns");
        //string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString().Replace('\'', ' ').Trim();
        string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString().Replace('\'', ' ').Trim();  // nadeem
        cmdExcel.CommandText = "SELECT * From [" + SheetName + "]";
        oda.SelectCommand = cmdExcel;
        oda.Fill(dtExcelRows);
        connExcel.Close();
        bool Structure_FLG = false;
}
连接字符串也在web.config中正确设置,如下所示

<add name="Excel03ConString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR={1}'"/>
<add name="Excel07ConString" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR={1}'"/>


我哪里做错了?

此行将把所有上传的文件保存为XLS格式,而不管上传的文件扩展名如何,并且在实际文件格式不匹配时可能引发异常:

fname = path + filename_ + ".xls";
我建议使用
Path.GetExtension(fluploadData.FileName)
方法提供的文件扩展名:

string fname = path + filename_ + FileExt;

外部表不在预期格式中。尝试使用Jet OLEDB 4.0提供程序的连接字符串读取较新的XLSX格式时,通常会发生错误,反之亦然。因此,请确保已将您的设置与上载的文件扩展名相对应。

该错误仅发生在某些文件上还是所有XLS文件上?当您试图在服务器中手动打开创建的文件时发生了什么?连接字符串本身似乎正常,问题是您正在通过错误的连接字符串/文件格式选择读取文件。是的,它仅在
xls
文件中出现??是,它在服务器上正确打开。可能Excel文件包含混合数据列,请尝试为JET OLEDB连接字符串添加
IMEX=1
。相关问题&。