You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#使用OleDb读取Excel时,特殊字符工作表名引发FROM子句语法错误的问题咨询

解决OleDb读取带特殊字符Excel工作表的语法错误问题

这个问题的根源在于你的工作表名包含了空格和点号这类OleDb SQL语法中的特殊字符,直接拼接进SQL语句后,解析器会把它们当成语法的一部分,而不是表名的组成部分,自然就抛出了Syntax error in FROM clause异常。

原来的sheet1没有特殊字符,所以[sheet1$]的写法能被正确识别,但换成topos .architectures. bureaux后,拼接出来的[topos .architectures. bureaux$]会让OleDb误以为点号是对象分隔符、空格是语法分隔,导致解析失败。

解决方法

你需要用单引号把整个工作表名(包括末尾的$)包裹起来,再放到方括号中,这样OleDb就能正确识别这个带特殊字符的表名了。修改后的代码如下:

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

另外额外提一句:我给代码加上了using语句,这样能自动释放数据库连接和命令对象,避免资源泄漏,比手动调用Close()更可靠。

补充提醒

虽然这里是你自己控制的工作表名,但如果未来sheetName来自外部输入,直接拼接SQL会有注入风险。不过对于Excel的OleDb查询,表名无法通过参数化查询来绑定,所以一定要确保sheetName的来源是安全可信的。

内容的提问来源于stack exchange,提问作者Eddayfy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 17:12:42