我目前的要求是我需要在单个查询中从excel表(DUMMY.xls)中选择多个范围并将其放入DataTable(fooData1):
从上图中可以看出,我有从A到F的列。
因此,我将从A到B以及从D到F的列过滤成单个dataTable(fooData1)。
结果数据表的内容应如下所示:
NAME ID Date Hobby COLOR
DEEPAK 1 Coding Black
ASTHA 2 Singing Red
GAURAV 3 Dancing Blue
BHAVESH 4 6/29/2007 Painting Green
我的代码是这样的:
并且在执行查询时会触发以下错误
"在SQL语句结束后找到的字符。"
DataTable fooData1 = new DataTable();
System.Data.OleDb.OleDbConnection dbConnection =
new System.Data.OleDb.OleDbConnection
(@"Provider=Microsoft.Jet.OLEDB.4.0;"
+ @"Data Source=C:\Dummy.xls;"
+ @"Extended Properties=""Excel 8.0;HDR=Yes;""");
dbConnection.Open();
try
{
string strSql = "SELECT * FROM [Sheet1$A:B] ; select * from[Sheet1$D:F]";
OleDbCommand cmd = new OleDbCommand(strSql);
cmd.Connection = dbConnection;
System.Data.OleDb.OleDbDataAdapter dbAdapter1 = new System.Data.OleDb.OleDbDataAdapter(cmd);
dbAdapter1.Fill(fooData1);
}
finally
{
dbConnection.Close();
}
答案 0 :(得分:2)
可以通过SQL解决,使用UNION ALL
。
SELECT * FROM [Sheet1$A:B] UNION ALL select * from[Sheet1$E:F]
我制作了测试数据:
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
和DataTable得到了:
1 2
1 2
5 6
5 6
(由于特定于HDR=Yes
的选项,第一行是标题)
答案 1 :(得分:0)
嘿,对于您的问题,您可以使用F和列号选择单个列。例如," SELECT * FROM [Sheet1 $ A:B];从[Sheet1 $ D:F]"中选择*;可以重写为:
"SELECT F1,F2,F4,F5 FROM [Sheet1$];"