C# Oledb异常-上载excel文件时定义的字段太多

C# Oledb异常-上载excel文件时定义的字段太多,c#,file-upload,export-to-excel,C#,File Upload,Export To Excel,这是我上传excel的代码 if (RevenueDumpFileUpload.HasFile) { string strFilePathOnServer = ConfigurationManager.AppSettings["RevenueDumpFileLocation"]; String sConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +

这是我上传excel的代码

if (RevenueDumpFileUpload.HasFile)
        {
            string strFilePathOnServer = ConfigurationManager.AppSettings["RevenueDumpFileLocation"];
            String sConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(strFilePathOnServer) + RevenueDumpFileUpload.FileName + ";Extended Properties=\"Excel 8.0;IMEX=1;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text\"";
            string strPostedFileName = RevenueDumpFileUpload.PostedFile.FileName;
            if (strPostedFileName != string.Empty && RevenueDumpFileUpload.PostedFile.ContentLength != 0)
            {
                //Save-Upload File to server. 
                RevenueDumpFileUpload.PostedFile.SaveAs(Server.MapPath(strFilePathOnServer) + RevenueDumpFileUpload.FileName);
                RevenueDumpFileUpload.FileContent.Dispose();
            }
            OleDbConnection Exlcon = new OleDbConnection(sConnectionString);
            try
            {
                //Exlcon.Open();
            }
            catch
            {
                return;
            }
            OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [Owner$]", Exlcon);
            OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
            objAdapter1.SelectCommand = objCmdSelect;
            objDataset1.Clear();
            objAdapter1.Fill(objDataset1, "XLData");
            DataRow rowDel = objDataset1.Tables["XLData"].Rows[0];
            objDataset1.Tables["XLData"].Rows.Remove(rowDel);
            objDataset1.Tables["XLData"].Columns[0].ColumnName = "Industry";
            objDataset1.Tables["XLData"].Columns[1].ColumnName = "Company Name";
            objDataset1.Tables["XLData"].Columns[2].ColumnName = "Website";
            objDataset1.Tables["XLData"].Columns[3].ColumnName = "Address";
            objDataset1.Tables["XLData"].Columns[4].ColumnName = "State";
            objDataset1.Tables["XLData"].Columns[5].ColumnName = "Company PhoneNumber";
            objDataset1.Tables["XLData"].Columns[6].ColumnName = "Contact Person";
            objDataset1.Tables["XLData"].Columns[7].ColumnName = "Title Description";
            objDataset1.Tables["XLData"].Columns[8].ColumnName = "Company Size";
            objDataset1.Tables["XLData"].Columns[9].ColumnName = "Mail ID";
            objDataset1.Tables["XLData"].Columns[10].ColumnName = "Guess MailID";
            objDataset1.Tables["XLData"].Columns[11].ColumnName = "Phone No";
            objDataset1.Tables["XLData"].Columns[12].ColumnName = "Linked in id";
            objDataset1.Tables["XLData"].Columns[13].ColumnName = "Comment";
            methodtosave();
        }
我得到错误填充方法…“未定义的字段太多”。
只有“14”列。…

错误是字段未定义,因此我认为数据表中至少有一些行的宽度大于14列。Excel可能很有趣,因为一个空但初始化的单元格被视为数据单元格

查看
objDataset1.Tables[“XLData”].Columns.Count
并查看返回的内容。您可能需要在列名分配的末尾添加一个函数,该函数围绕其余列循环并分配任意名称(列{x})


您也可以将select语句更改为仅检索前14行,而不是select*

我认为问题出在您的数据集中<代码>objDataset1.Clear()只是清除数据,而不是结构。尝试使用
objDataset1=newdataset()

编辑:

尝试使用连接字符串:

@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" 
            + Server.MapPath(strFilePathOnServer) 
            + RevenueDumpFileUpload.FileName 
            + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";

请参阅下面的代码,尝试在下面的select字符串中给出所有的LOCOMS,并检查连接字符串

string sql = "SELECT F1, F2, F3, F4, F5 FROM [sheet1$] WHERE F1 IS NOT NULL";

OleDbConnection connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + PrmPathExcelFile + @";Extended Properties=""Excel 8.0;IMEX=1;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text""");

OleDbCommand cmd = new OleDbCommand(sql, connection);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);

DataSet ds = new DataSet();
ds.Tables.Add("xlsImport", "Excel");
da.Fill(ds, "xlsImport");

// Remove the first row (header row)
DataRow rowDel = ds.Tables["xlsImport"].Rows[0];
ds.Tables["xlsImport"].Rows.Remove(rowDel);

ds.Tables["xlsImport"].Columns[0].ColumnName = "LocationID";
ds.Tables["xlsImport"].Columns[1].ColumnName = "PartID";
ds.Tables["xlsImport"].Columns[2].ColumnName = "Qty";
ds.Tables["xlsImport"].Columns[3].ColumnName = "UserNotes";
ds.Tables["xlsImport"].Columns[4].ColumnName = "UserID";

connection.Close(); 

  var data = ds.Tables["xlsImport"].AsEnumerable();
    var query = data.Where(x => x.Field<string>("LocationID") == "COOKCOUNTY").Select(x =>
                new Contact
                {
                    LocationID= x.Field<string>("LocationID"),
                    PartID = x.Field<string>("PartID"),
                    Quantity = x.Field<string>("Qty"),
                    Notes = x.Field<string>("UserNotes"),
                    UserID = x.Field<string>("UserID")
                });
string sql=“从[sheet1$]中选择F1、F2、F3、F4、F5,其中F1不为空”;
OleDbConnection connection=new-OleDbConnection(“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=“+PrmPathExcelFile+@”;Extended Properties=”“Excel 8.0;IMEX=1;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text”“”;
OleDbCommand cmd=新的OleDbCommand(sql,连接);
OleDbDataAdapter da=新的OleDbDataAdapter(cmd);
数据集ds=新数据集();
添加(“xlsImport”、“Excel”);
da.填充(ds,“xlsImport”);
//删除第一行(标题行)
DataRow-rowDel=ds.Tables[“xlsImport”].Rows[0];
ds.Tables[“xlsImport”].Rows.Remove(rowDel);
ds.Tables[“xlsImport”]。Columns[0]。ColumnName=“LocationID”;
ds.Tables[“xlsImport”]。Columns[1]。ColumnName=“PartID”;
ds.Tables[“xlsImport”]。Columns[2]。ColumnName=“数量”;
ds.Tables[“xlsImport”]。Columns[3]。ColumnName=“UserNotes”;
ds.Tables[“xlsImport”].Columns[4].ColumnName=“UserID”;
connection.Close();
var data=ds.Tables[“xlsImport”].AsEnumerable();
var query=data.Where(x=>x.Field(“LocationID”)==“COOKCOUNTY”)。选择(x=>
新联系人
{
LocationID=x.Field(“LocationID”),
PartID=x.字段(“PartID”),
数量=x字段(“数量”),
Notes=x.Field(“用户注释”),
UserID=x.Field(“UserID”)
});

您说共有13列,但您在代码中指定了14列(0-13)。请尝试在select查询中使用范围而不是工作表,这在过去对我有效,您的标题是“定义的字段太多”。您的错误日志是“未定义的字段太多”。请更正两个选项之一。objAdapter1.SelectCommand=objCmdSelect//objDataset1.Clear();objDataset1=新数据集();objAdapter1.Fill(objDataset1,“XLData”);DataRow rowDel=objDataset1.Tables[“XLData”]。行[0];是的,但同样的事情发生了…是否是pblm在excel表格中的数据我上传什么?同样的错误,当我使用上面的连接字符串时,我在那里我需要更改任何东西我的最终建议!!!尝试使用不同的(或新的)excel文件并检查填充是否有效。数据bcoz i中是否有任何pblms,列形式为“A到N”,数据高达“A2:M633”。我有633行,但只有156行得到了保存DK得到了。我已经解决了其他问题,即单引号值无法保存到数据库中