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
相关产品推荐
相关产品推荐

