gpt4 book ai didi

c# - 使用 WHERE 子句对 Excel 进行 OLE CALL

转载 作者:太空狗 更新时间:2023-10-29 23:00:45 26 4
gpt4 key购买 nike

我正在修复一个 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);

我试图在 SQL 代码中添加 WHERE 子句以仅选择具有非空“A”列的行,但这不起作用。

SELECT * FROM [{0}$] WHERE [A] <> ''

有没有一种方法可以使用一些 SQL 代码来增强命令文本,以便仅在满足特定条件的情况下从 Excel 中提取数据行?

最佳答案

如果您的电子表格有标题(我指的不是 Excel 的“A”、“B”等列标题),那么您可以在条件中使用这些标题。实例化 OleDbConnection 时,您需要在连接字符串中指定它。

string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + ";Extended Properties=\"Excel 8.0;HDR=YES;\"";

然后你可以按照以下行执行SQL

string SQL = "SELECT * FROM [Sheet1$] WHERE [Name] <> ''";

如果您的电子表格没有标题,您仍然可以使用 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] <> ''"

关于c# - 使用 WHERE 子句对 Excel 进行 OLE CALL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13805925/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com