我在 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/