gpt4 book ai didi

使用 ADO.NET 的 PostgreSQL 参数化插入

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

我将 NpgSQL 与 PostgreSQL 和 ADO.NET 一起使用。请原谅这个问题的简单性,因为我这周才开始使用 PostgreSQL 和 NpgSQL。

像这样的东西很好用:

[Test]
public void InsertNoParameters()
{
NpgsqlConnection conn = new NpgsqlConnection("Host=localhost; Database=postgres; User ID=postgres; Password=password");
conn.Open();

IDbCommand command = conn.CreateCommand();
string sql = "INSERT INTO Customers (FirstName,LastName) VALUES ('Test','Tube')";
command.CommandText = sql;
command.ExecuteNonQuery();
conn.Close();
}

当我输入参数时,我收到错误消息:Npgsql.NpgsqlException:错误:42703:列“_firstname”不存在

[Test]
public void InsertWithParameters()
{
NpgsqlConnection conn = new NpgsqlConnection("Host=localhost; Database=postgres; User ID=postgres; Password=password");
conn.Open();

IDbCommand command = conn.CreateCommand();
string sql = "INSERT INTO Customers (FirstName,LastName) VALUES (_FirstName,_LastName)";
command.CommandText = sql;

var parameter = command.CreateParameter();
parameter.ParameterName = "_FirstName";
parameter.Value = "Test";
command.Parameters.Add(parameter);

parameter = command.CreateParameter();
parameter.ParameterName = "_LastName";
parameter.Value = "Tube";
command.Parameters.Add(parameter);

command.ExecuteNonQuery();
conn.Close();
}

最佳答案

评论中的回复是正确的:

  1. Npgsql 不支持 _ 作为参数占位符表示法。您应该使用 @ 或 :(所以 @FirstName 或 :FirstName,而不是 _FirstName)。
  2. PostgreSQL 会自动将您的表名和列名小写,除非它们被双引号括起来。对所有内容使用小写名称(更简单)或在 SQL 查询中引用标识符。

因此您的代码应该大致如下所示:

IDbCommand command = conn.CreateCommand();
string sql = "INSERT INTO Customers (first_name, last_name) VALUES (@FirstName,@LastName)";
command.CommandText = sql;

var parameter = command.CreateParameter();
parameter.ParameterName = "FirstName";
parameter.Value = "Test";
command.Parameters.Add(parameter);

关于使用 ADO.NET 的 PostgreSQL 参数化插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32158014/

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