ASP.NET API中PostgreSQL带下划线表名的SQL查询语法问题
解决ASP.NET API中PostgreSQL带下划线表名的查询问题
你的问题核心是C#字符串中双引号的转义处理,以及PostgreSQL对表名大小写/引号的规则,以下是两种可行的修正方案:
方案1:转义字符串中的双引号
在普通C#字符串里,内部的双引号需要用\转义,修改后的查询语句如下:
public async Task<List<AlarmStatusServiceReading>> GetAlarmStatusServices() { var readings = await _dbService.GetAll<AlarmStatusServiceReading>("SELECT * FROM public.\"Alarm_Status\" ORDER BY id ASC ", new { }); return readings; }
方案2:使用逐字字符串(Verbatim String)
用@前缀定义字符串,内部的双引号只需写两个""即可完成转义,代码更易读:
public async Task<List<AlarmStatusServiceReading>> GetAlarmStatusServices() { var readings = await _dbService.GetAll<AlarmStatusServiceReading>(@"SELECT * FROM public.""Alarm_Status"" ORDER BY id ASC ", new { }); return readings; }
补充说明
PostgreSQL的表名规则:
- 如果创建表时未用双引号(如
CREATE TABLE Alarm_Status (...)),PostgreSQL会自动将表名转为小写alarm_status,此时查询不用加双引号,直接写SELECT * FROM public.alarm_status也能正常执行。 - 如果创建表时用了双引号(如
CREATE TABLE "Alarm_Status" (...)),则表名会被严格区分大小写,查询时必须用双引号包裹,否则会提示“关系不存在”。
内容的提问来源于stack exchange,提问作者user9387
相关产品推荐
相关产品推荐

