npgsql 4.0 没有明确 return 字典参数
Npgsql 4.0 does not return dictionary parameter clearly
当我用字典参数插入值 table 并且发生了一些异常时,npgsql 没有 return SQL 清楚地查询。
示例:
伪代码:
Dictionary<string, object> params = new Dictionary <string, object>();
string sql: "insert into bla values (:item1)";
params.Add ("item1", 'bla bla');
ExecuteNonQuery (sql);
示例代码块:
using (NpgsqlCommand cmd = new NpgsqlCommand("insert into foo values (:TEST)",conn))
{
cmd.Parameters.Add(new NpgsqlParameter<string>("TEST",
NpgsqlDbType.Varchar));
cmd.Parameters[0].Value = "null [=12=] null";
cmd.ExecuteNonQuery();
}
}
然后我得到这样的错误:
Database Exception: 22021: invalid byte sequence for encoding "UTF8": 0x00. Query ==> insert into foo values ()
在使用 npgsql 2.2.5 之前,我遇到了这样的错误:
Database Exception: 22021: invalid byte sequence for encoding "UTF8": 0x00. Query ==> insert into foo values ('null [=14=] null')
如果我遇到 insert 语句的错误,例如 unicode 问题,我会得到这样的错误;
Database Exception: INSERT INTO bla Values ();
当我使用 npgsql 2.2.5 时,出现如下错误:
Database Exception: INSERT INTO bla Values ('bla bla');
为什么 npgsql 对我隐藏字典参数值? :)
您必须像这样向查询提供列和值。
运行 字典中每个项目的类似代码 foreach
String sql = "INSERT INTO TableName(ColumName) VALUES (:value)";
Npgsql 2.x(非常旧)通过将参数内联到您的 SQL 查询(“客户端参数绑定”)来发送您的参数,除非准备好命令。 Npgsql 3.x 切换为始终在 SQL 本身之外以二进制格式发送参数,这在性能、安全性等方面更胜一筹。这就是为什么您的异常消息不包含实际参数值的原因。
请注意,在某些情况下,在异常消息中包含参数值可能被认为是不安全的。
当我用字典参数插入值 table 并且发生了一些异常时,npgsql 没有 return SQL 清楚地查询。 示例:
伪代码:
Dictionary<string, object> params = new Dictionary <string, object>();
string sql: "insert into bla values (:item1)";
params.Add ("item1", 'bla bla');
ExecuteNonQuery (sql);
示例代码块:
using (NpgsqlCommand cmd = new NpgsqlCommand("insert into foo values (:TEST)",conn))
{
cmd.Parameters.Add(new NpgsqlParameter<string>("TEST",
NpgsqlDbType.Varchar));
cmd.Parameters[0].Value = "null [=12=] null";
cmd.ExecuteNonQuery();
}
}
然后我得到这样的错误:
Database Exception: 22021: invalid byte sequence for encoding "UTF8": 0x00. Query ==> insert into foo values ()
在使用 npgsql 2.2.5 之前,我遇到了这样的错误:
Database Exception: 22021: invalid byte sequence for encoding "UTF8": 0x00. Query ==> insert into foo values ('null [=14=] null')
如果我遇到 insert 语句的错误,例如 unicode 问题,我会得到这样的错误;
Database Exception: INSERT INTO bla Values ();
当我使用 npgsql 2.2.5 时,出现如下错误:
Database Exception: INSERT INTO bla Values ('bla bla');
为什么 npgsql 对我隐藏字典参数值? :)
您必须像这样向查询提供列和值。
运行 字典中每个项目的类似代码 foreach
String sql = "INSERT INTO TableName(ColumName) VALUES (:value)";
Npgsql 2.x(非常旧)通过将参数内联到您的 SQL 查询(“客户端参数绑定”)来发送您的参数,除非准备好命令。 Npgsql 3.x 切换为始终在 SQL 本身之外以二进制格式发送参数,这在性能、安全性等方面更胜一筹。这就是为什么您的异常消息不包含实际参数值的原因。
请注意,在某些情况下,在异常消息中包含参数值可能被认为是不安全的。