使用SQL Server命令通过ADO.NET读取excel?

时间:2012-03-24 22:00:49

标签: c# excel oledb jet

可以使用以下代码读取XLS文件:

string path =@"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);
...
...

但是 - 当我增强查询以包含一些SQL Server命令时,如

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

它变成了BANG

enter image description here

我知道OLEDB在幕后使用access jet / ace。

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

1 个答案:

答案 0 :(得分:2)

您必须在查询Excel中使用IIF

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语句。因此,您必须使用上述解决方案