Nic*_*rAZ 5 .net c# oledb excel ado.net
我正在修复一个C#项目,该项目使用带有数据定义的Excel工作表来创建SQL Server中批量插入使用的.fmt文件.
我的问题是Excel文件有时在底部有空白行,而我正在处理的C#解析器将检测多个行,这些行优于包含数据定义的实际行数.
因此,fmt文件在其第二行上具有更多行,并且批量插入在到达底部并尝试继续读取时抛出异常.
例如,只有50行数据和50行空行.fmt文件的第二行将有一个100(第一行是SQL Server版本).第3行到第52行是50行数据定义.当批量插入尝试到达第53行时,它会返回一些列异常.
C#解析器使用Ace OleDB 12连接到Excel 97格式文件.
SQL是:
var commandText = string.Format("SELECT * FROM [{0}$]", SpreadSheetName);
Run Code Online (Sandbox Code Playgroud)
我试图在SQL代码中添加一个WHERE子句,只选择具有非空"A"列的行,但这不起作用.
SELECT * FROM [{0}$] WHERE [A] <> ''
Run Code Online (Sandbox Code Playgroud)
是否有一种方法可以使用某些SQL代码增强命令文本,以便仅在满足特定条件的情况下从Excel中提取数据行?
如果您的电子表格包含标题(我不是指Excel的"A","B"等列标题),那么您可以在条件中使用它们.实例化时,您需要在连接字符串中指定它OleDbConnection
.
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + ";Extended Properties=\"Excel 8.0;HDR=YES;\"";
Run Code Online (Sandbox Code Playgroud)
然后你可以沿着行执行SQL
string SQL = "SELECT * FROM [Sheet1$] WHERE [Name] <> ''";
Run Code Online (Sandbox Code Playgroud)
如果您的电子表格没有标题,您仍然可以使用WHERE子句,但必须通过"F1","F2"等引用列,并将连接字符串设置为不使用标题
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + ";Extended Properties=\"Excel 8.0;HDR=NO;\"";
string SQL = "SELECT * FROM [Sheet1$] WHERE [F1] <> ''"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9803 次 |
最近记录: |