我正在使用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列我不能这样做因为列名不相同。我怎么能解决这个问题,我什么都不知道。我对改变选择查询感到困惑,因为这段代码不起作用工作更多列数。
任何有助于帮助的人。
由于
答案 0 :(得分:1)
你错过了#34; $"在工作表名称之后。
OleDbDataAdapter myCommand = new OleDbDataAdapter(" SELECT * FROM [" + GetExcelSheetNames(路径,扩展名)[0] +" $ ]",strConn);