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

C#连接MSAccess数据库时出现FROM子句语法错误求助

问题解决:Access "Syntax error in FROM clause" 错误

关键原因:Access SQL语法与Oracle的差异

Access的ACE/OLEDB驱动使用的Jet SQL语法不支持Oracle中简写的JOIN关键字,必须显式指定连接类型为INNER JOIN(这是你当前SQL使用的连接类型)。Oracle允许省略INNER前缀,但Access要求必须写全,这是导致语法错误的直接原因。

另外,表无数据不会触发语法错误——空表只会让查询返回空结果集,和你遇到的语法问题无关。

修正后的代码

将SQL中的JOIN替换为INNER JOIN即可解决问题,同时注意C#字符串路径的转义(使用@前缀避免转义字符问题):

using (IDbConnection connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\CYME\DB\cyme-31R2.mdb"))
{
    connection.Open();
    string query = @"SELECT g.NetworkID, g.ACTIVEGENERATION, g.DEVICENUMBER, g.DEVICETYPE, u.DATAVALUESTR as PremiseId 
                    FROM CYMDGGENERATIONMODEL g 
                    INNER JOIN CYMDEVICEUDD u ON g.DEVICENUMBER = u.DEVICENUMBER 
                    INNER JOIN CYMLOADMODEL m ON g.LOADMODELID = m.LOADMODELID 
                    WHERE u.DATAVALUESTR IS NOT NULL AND u.DATAID='PremiseID' AND m.LOADMODELNAME='LFM' AND g.DEVICETYPE = 37 
                    GROUP BY g.NetworkID, g.ACTIVEGENERATION, g.DEVICENUMBER, g.DEVICETYPE, u.DATAVALUESTR";

    var result = connection.Query<CymDGGenerationModel>(query).ToList();

    return result;
}

额外检查项

如果修正后仍有问题,可以排查以下点:

  • 表名是否包含空格或特殊字符:如果有,需要用方括号包裹,比如[CYMDGGENERATIONMODEL]
  • 连接字符串的数据源路径是否正确:确保mdb文件存在,且路径转义无误(使用@前缀是最稳妥的方式)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 23:35:18