c# - 为什么 PostgreSQL 将查询中的值视为列名?

标签 c# postgresql npgsql

我在 C# 中使用 Npgsql 与我的 PostgreSQL 数据库进行通信。我的数据库中使用的所有名称都是大小写混合的,因此在查询中我确保在每个名称周围使用双引号。以下是我发送查询的方式:

// construct an insert query
string insertQuery = "insert into \"Update\" (\"Vehicle\",\"Property\",\"Value\") " + 
                     "values (" + vehicleNum.ToString() + ",\"" + propertyName + 
                     "\",\"" + propertyValue + "\")";

// execute the query
NpgsqlCommand insertCommand = new NpgsqlCommand(insertQuery, conn);
insertCommand.ExecuteScalar();

通过插入断点和检查,我验证了字符串 insertQuery 在发送之前看起来是这样的:

insert into "Update" ("Vehicle","Property","Value") values (12345,"EngineSpeed","50")

当我发送这个查询时,PostgreSQL 给我一个错误,它包含在一个 Npgsql 异常中,指出:ERROR: 42703: column "EngineSpeed"does not exist

从我的查询中可以看出,EngineSpeed 不是一个列,它是 Property 列的值,因此自然不可能出现具有该名称的列存在。那么为什么 PostgreSQL 以这种方式处理我的查询,我该如何解决这个问题呢?我的查询是否以错误的方式构建?

最佳答案

使用单引号来引用字符串。双引号用于表示列名。

关于c# - 为什么 PostgreSQL 将查询中的值视为列名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8482207/

相关文章:

c# - Pig Latin Translator 吐出多行? C#

c# - 如何在WinForms中显示图片然后删除?

c# - 远程 OPC 已连接但无法读取

postgresql - 用单个整数调用整数[]的函数

postgresql - 使用 postgresql 的 AsyncQuery 和使用 npqsql 的 dapper

asp.net - 使用 PostgreSQL 在 ASP.NET 中进行登录控制

c# - 在 asp.net 中的标签之间添加超链接

ruby-on-rails - 如何在 Ruby on Rails 中使用 PostgreSQL JSON 数组查询 ActiveRecord::Relation

postgresql - pg_dump 错误 : malformed record literal

c# - Entity Framework 7 中表和属性的名称不区分大小写