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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:27:03