我整个上午都在研究,找不到有效的解决方案。我希望有人能告诉我答案。
我让用户使用 FileUpload 上传 .xls 文件,然后我想从 4 个工作表中选择所有数据并放入 4 个单独的数据集。这是我正在使用的代码:
string strConn = "Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=" + FileUpload1.PostedFile.FileName;
string query = "SELECT * FROM [{0}]";
DataSet excelDataSet = new DataSet();
OdbcDataAdapter da = new OdbcDataAdapter(query, strConn);
所以我有2个问题,
第一个问题:如何在不知道其名称的情况下选择工作表?上面的代码不起作用,如果我用 MyFirstSheet$ 替换 {0} 则它起作用。我需要知道如何在不知道名称的情况下进行选择。我得到的错误是:
ERROR [42S02] [Microsoft][ODBC Excel Driver] The Microsoft Jet database engine could not find the object '0}'. Make sure the object exists and that you spell its name and the path name correctly.
第二个问题:有没有办法一次选择所有 4 个并将它们放入 4 个单独的数据集中?目前我打算阅读文件 4 次。
建议代码:
String connString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileUpload1.PostedFile.FileName.ToString() + ";Extended Properties=\"Excel 8.0;HDR=No;IMEX=1\"";
OleDbConnection conn = new OleDbConnection(connString);
conn.Open();
String sheet = conn.GetSchema("Tables").Rows[0]["TABLE_NAME"].ToString();
String selectCommand = String.Format(@"SELECT * FROM [{0}]", sheet);
DataSet excelDataSet = new DataSet();
OdbcDataAdapter da = new OdbcDataAdapter(selectCommand, "Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=" + FileUpload1.PostedFile.FileName);
da.Fill(excelDataSet);
btnLoadCsv.Text = excelDataSet.Tables[0].Rows[10][1].ToString();