命令中传递单引号的问题

问题描述 投票:0回答:1

我正在编写一个 C#.NET WinForms 应用程序。我目前正在使用

NpgsqlFactory
实现和测试一些数据库查询。我的问题是(我假设)字符
''
', '
无法正确识别。 当我运行这条线时

STRING_AGG(CONCAT(XY.PropertyNameHere, ''), ', ' ORDER BY XY.PropertyNameHere) AS TableNameHere,

在pgAdmin4中,一切正常,但在程序中却不行。 我已经尝试过构建不同的字符串,即

"', '"
", "
,但我收到了不同的错误消息。

42P01:表 »projectNameHere« 的 FROM 子句中缺少条目。

字符串的长度为零。

显然我无法在命令中正确传输这些字符。

c# npgsql
1个回答
0
投票

在使用 NpgsqlFactory 进行数据库查询时,您似乎在 C#.NET WinForms 应用程序中遇到了字符处理问题。让我们分解问题并探索潜在的解决方案:

  1. STRING_AGG 和 CONCAT:STRING_AGG 函数用于字符串 SQL Server 中的聚合。它连接多行的值 成一个字符串,由指定的分隔符分隔。这 CONCAT 函数将两个或多个字符串连接在一起。在你的 查询,您正在使用 STRING_AGG(CONCAT(XY.PropertyNameHere, ''), ', ' ORDER BY XY.PropertyNameHere) AS TableNameHere。问题可能是 与如何处理字符 ' 和 ', ' 有关。

  2. 字符转义:在处理 SQL 查询时,尤其是动态查询时,正确处理特殊字符至关重要。在 C# 中,您可以通过将单引号加倍来转义单引号(例如,'' 代表单引号)。要在字符串中包含逗号,您可以在整个字符串周围使用双引号(例如,“', '”)。

  3. 字符串构建:不要直接将 SQL 查询编写为单个字符串,而是考虑使用参数化查询或字符串插值。参数化查询有助于防止 SQL 注入并自动处理特殊字符。

C# string propertyName = "XY.PropertyNameHere"; 字符串分隔符=“,”; 字符串查询 = $"SELECT STRING_AGG(CONCAT({propertyName}, ''), '{delimiter}' ORDER BY {propertyName}) AS TableNameHere"; // 使用 NpgsqlFactory 执行查询...

  1. 检查程序环境:确保程序环境 (例如,连接字符串、数据库设置)与您的匹配 在 pgAdmin4 中使用。验证数据库模式、表名称、 并且列名一致。
  2. 错误消息:您提到的错误消息(42P01:表 »projectNameHere« 的 FROM 子句中缺少条目)表明表名称或别名存在问题。仔细检查查询中的表名称,确保其与数据库中的实际表名称匹配。
© www.soinside.com 2019 - 2024. All rights reserved.