你也许我重定向到这一个环节,但我会是第一个告诉你们:我用这个了很多次,我真不这次不知道什么问题。asp.net - 阅读Excel工作表的名称不返回数据表
我的情况是:我需要将Excel数据导入到数据库中。听起来很简单,对吧?现在,首先我需要知道表单名称。这就是我的问题开始的地方。我再说一遍,我已经使用了多次,我不知道我做错了什么这一次:
的“它”,我指的是这段代码:
public string[] GetSheetNames(string excelPath) {
try
{
string[] ar = null;
if (Path.GetExtension(excelPath) == ".xls")
{
conString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelPath + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"");
}
else if (Path.GetExtension(excelPath) == ".xlsx")
{
conString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelPath + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\";");
}
using (oleConn = new OleDbConnection(conString))
{
oleConn.Open();
if (oleConn.State == ConnectionState.Open)
{
//DataTable dt = oleConn.GetSchema("Tables");
//DataTable dt = oleConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new Object[] {null, null, null, "TABLE"});
DataTable dt = oleConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
if (dt == null)
{
return null;
}
ar = new string[dt.Rows.Count];
int t = 0;
foreach(DataRow dr in dt.Rows){
ar[t] = dr["TABLE_NAME"].ToString();
t++;
}
}
return ar;
}
}
catch (Exception)
{
throw;
}
}
它抛出一个异常,称该数据表的行数为0。我也用DataTable dt = oleConn.GetSchema("Tables")
和
DataTable dt = oleConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
new Object[] {null, null, null, "TABLE"});
,但他们都返回相同。
可能是什么问题?它可能是Excel文件吗?但我试过其他Excel文件,都失败了。
你可以发布'DataTable dt'的调试可视化器吗? – Hassan 2014-09-02 04:34:19