2012-03-24 69 views
0

可以读取XLS文件与此代码:通过SQL Server命令通过ADO.NET读取excel?

string path [email protected]"c:\r\1.xlsx"; 
OleDbConnection MyConnection = new OleDbConnection(@"provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + path + @"';HDR=Yes;Jet OLEDB:Engine Type=37"); 
OleDbDataAdapter MyCommand = new OleDbDataAdapter("select * from [Sheet1$]", MyConnection); 
DataSet DtSet = new DataSet(); 
MyCommand.Fill(DtSet); 
... 
... 

但是 - 当我提高查询到包括像

select *,case when 1=1 then 'a' else 'b' end as rr from [Sheet1$] 

一些SQL Server命令它去BANG

enter image description here

我知道OLEDB正在使用access喷气/王牌幕后。

如何在这里使用纯粹的T-SQL查询?

+2

困难,“Microsoft.ACE.OLEDB.12.0”无法理解像WHEN这样的SQLServer关键字,另一方面不可能使用不同的oledbprovider连接到excel文件。 – Steve 2012-03-24 22:13:17

回答

2

你必须使用IIF在查询Excel中

select *, 
    IIF(1 = 1, 'a', 'b') as rr 
from [Sheet1$] 

而且,创建多case语句,只是窝他们,就像这样:

select *, 
    IIF(1 = 1, 'a', IIF(2 = 2, 'c', 'b')) as rr 
from [Sheet1$] 

至于是否可以使用纯MSSQL查询,我不相信任何可以用于Excel的连接都支持CASE语句。因此,您将不得不使用上述解决方案

+0

是这种访问语法? – 2012-03-24 22:12:41

+1

正确,这解决了问题中提供的情况,但不是问题。 – Steve 2012-03-24 22:14:22

+0

@RoyiNamir是的,我相信它是http://office.microsoft.com/en-us/access-help/iif-function-HA001228853.aspx – 2012-03-24 22:26:09