OleDbException定义的字段太多

时间:2015-04-03 11:25:48

标签: c# asp.net oledbdataadapter

我正在使用asp.net。

GetTable方法

 private DataSet GetTable(string pathUrl, string extention)
        {
            string path= pathUrl;
            string strConn;
            if (extention == "xls")
                strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path+ ";Extended Properties=Excel 8.0;";
            else strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path+ ";Extended Properties=Excel 12.0";


            OleDbDataAdapter myCommand = new OleDbDataAdapter("SELECT * FROM [" + GetExcelSheetNames(path, extention)[0] + "]", strConn);
            DataSet myDataSet = new DataSet();
            myCommand.Fill(myDataSet, "ExcelInfo"); // I get error here
            if (myDataSet.Tables[0].Rows.Count > 0)
            {
                return myDataSet;
            }
            else return null;
        }

GetExcellSheetNames方法

static String[] GetExcelSheetNames(string excelFile, string extention)
        {
            OleDbConnection objConn = null;
            System.Data.DataTable dt = null;
            string path = excelFile;
            string Conn = "";
            if (extention == "xls")
                Conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=Excel 8.0;";
            else Conn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0";
            try
            {    
                objConn = new OleDbConnection(Conn);
                objConn.Open();

                dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

                if (dt == null)
                {
                    return null;
                }

                String[] excelSheets = new String[dt.Rows.Count];
                int i = 0;


                foreach (DataRow row in dt.Rows)
                {
                    excelSheets[i] = row["TABLE_NAME"].ToString();
                    i++;
                }

                return excelSheets;
            }
            catch (Exception ex)
            {
                return null;
            }
            finally
            {
                if (objConn != null)
                {
                    objConn.Close();
                    objConn.Dispose();
                }
                if (dt != null)
                {
                    dt.Dispose();
                }
            }
        }

错误恰好是:

我在代码中遇到错误 GetTable方法

myCommand.Fill(myDataSet, "ExcelInfo");

例外详细信息:

System.Data.OleDb.OleDbException: Too many fields defined.

问题:

myCommand.Fill(myDataSet," ExcelInfo");由于 excell 文件中的列号而显示错误。我对此进行了研究,人们说列不得超过255个列等。

所以

如果我尝试选择50列我不能这样做因为列名不相同。我怎么能解决这个问题,我什么都不知道。我对改变选择查询感到困惑,因为这段代码不起作用工作更多列数。

任何有助于帮助的人。

由于

1 个答案:

答案 0 :(得分:1)

你错过了#34; $"在工作表名称之后。

  

OleDbDataAdapter myCommand = new OleDbDataAdapter(" SELECT * FROM [" +   GetExcelSheetNames(路径,扩展名)[0] +" $ ]",strConn);