【发布时间】:2014-09-02 03:37:32
【问题描述】:
您可能会将我重定向到此链接的其他链接,但我会第一个告诉你们:我已经使用了很多次,但我真的不知道这次有什么问题。
我的场景是:我需要将 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;
}
}
它抛出一个异常,说DataTable的行数是0。我也用DataTable dt = oleConn.GetSchema("Tables")和
DataTable dt = oleConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
new Object[] {null, null, null, "TABLE"});
但它们都返回了相同的结果。
可能是什么问题?会不会是 Excel 文件?但我尝试过其他 Excel 文件,但都失败了。
【问题讨论】:
-
你能发布
DataTable dt的调试可视化工具吗?