gpt4 book ai didi

c# - NpgSQL 插入包含反斜杠的文件路径 "\\"

转载 作者:行者123 更新时间:2023-11-29 12:01:25 25 4
gpt4 key购买 nike

我正在尝试创建一个包含文件路径的记录。使用 NpqSQL 驱动程序插入启用 UTF8 的 Postgres 数据库。

我的表格定义:

CREATE TABLE images
(
id serial,
file_location character varying NOT NULL
)

我的 SQL 语句包括执行它的代码(归结为最少):

string sqlStatement = "INSERT INTO images (file_location) VALUES ('\\2010')";

NpgsqlConnection dbConnection = new NpgsqlConnection(connectionString);
dbConnection.Open();
NpgsqlCommand dbCommand = new NpgsqlCommand(sqlStatement , dbConnection);
int result = dbCommand.ExecuteNonQuery();
dbConnection.Close();

当使用pgAdmin 插入上面的语句时,它工作正常。通过 Visual Studio C# 使用 NpgSQL 驱动程序,失败并出现以下异常:

"ERROR: 22021: invalid byte sequence for encoding \"UTF8\": 0x81"

正如 Milen 准确解释的那样,Postgres 将该语句解释为一个八进制 数字 (\o201 == 0x81)。

正如 Milen 也描述的那样,路径前面的 E 没有帮助。

快速回顾一下:为什么 NpqSQL 会阻止我插入 \\2010

最佳答案

(意识到我的评论看起来像一个答案,所以相应地转换了它们。)

你没有显示真正的代码,所以我想你的解释器/编译器将双反斜杠解释为转义的反斜杠,然后 Postgres 只看到一个反斜杠后跟一些数字。它解释为八进制字节值(八进制 201 = 十六进制 81)。

关于“转义”字符串常量(以“E”开头的字符串)- 在您的情况下,它们是完全不必要的。在标准 SQL 中,反斜杠没有特殊含义。

有关详细信息,请阅读手册(http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS)中的“4.1.2.1. 字符串常量”和“4.1.2.2. 带有 C 样式转义符的字符串常量”。

关于c# - NpgSQL 插入包含反斜杠的文件路径 "\\",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2493521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com