【问题标题】:"Syntax error in FROM clause" Excel in c#“FROM 子句中的语法错误”C# 中的 Excel
【发布时间】:2021-10-09 11:08:14
【问题描述】:

我有一个 Excel 文件,我想在 c# 中使用 OleDb 对其进行 raed,如下代码:

    string sheetName = "sheet1";
    try
    {
        string stringConnection = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=excelfile.xls;Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;MAXSCANROWS=0';";
    
        OleDbConnection OleDbConnection_ = new OleDbConnection(stringConnection);
        OleDbCommand OleDbCommand_ = new OleDbCommand("select * from [" + sheetName + "$]; ", OleDbConnection_);
        OleDbConnection_.Open();
    
        DataTable DataTable_ = new DataTable();
        DataTable_.Load(OleDbCommand_.ExecuteReader(), LoadOption.OverwriteChanges);
    
        OleDbConnection_.Close();
    
    }
    catch (Exception)
    {
        throw;
    }

一切正常,只是当我将 SheetName 值更改为 " topos .architectures.bureaux " 就像 xls 中的名称一样我拥有的文件,显示异常:

FROM 子句中的语法错误。

我在这里搞砸了,谢谢。

【问题讨论】:

  • 仔细检查工作表的名称。您在topos.architectures 之间添加了一个空格
  • 谢谢您的回答。我使用一个函数以编程方式获得它的工作表名称,该函数让我获得 excel 文件中第一张工作表的名称,这意味着空间在那里
  • 你能在OleDbCommand("select * from [" + sheetName + "$];上打个断点,然后把名字和excel表比较一下吗?
  • 是的,我做了一个我发现它是一样的,文件中工作表的重命名使它工作,但我需要使用文件中的名称。

标签: c# .net excel office365 oledb


【解决方案1】:

我想你只需要删除"select * from [" + sheetName + "$]; "中的$

$ 确实在 Excel 本身的引用中使用,但我认为不适用于 OleDB 命令语法

请参阅此问题以供参考:Reading from excel using oledbcommand

【讨论】:

  • 谢谢你的回答,这对我很有帮助,但不是我问题的答案。
【解决方案2】:

问题在于工作表名称中的点,点应该是#。

这样:

"select * from ['" + sheetName.Replace('.', '#') + "$'];"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 2022-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    相关资源
    最近更新 更多