我正在使用 Visual Studio 2010 PostgreSQL 9.x Npgsql
我正在尝试从 C# WinForms 应用程序的字段中插入数据。我只是不知道如何即时生成/检索下一个主键值。这是我的专栏名称:
epiphanyKey [PK] bigserial 交易数字 许可字符 dateOfActv日期 时间时间
我需要插入命令是“ session 安全的”,因为多个人可能同时将数据输入数据库。
NpgsqlConnection conn = new NpgsqlConnection("Server=localhost;Port=5432;User Id=postgres;Password=password;Database=epiphany;"); // postgres 8.3 on my test system
conn.Open(); // opens the connection
NpgsqlCommand cmd = new NpgsqlCommand("INSERT INTO wsmsmrs210 (epiphanyKey,transaction,license,dateOfActv,time, conn);
NpgsqlDataReader dr = cmd.ExecuteReader();
在上面的代码中,NpgsqlCommand cmd = ... 语句无法正常工作,因为我不知道主键值 epiphanyKey 的下一个主键值。
在将查询发送到数据库时,有什么想法或代码片段可以生成下一个主键值吗?
最佳答案
您可以使用returning
关键字使查询返回刚刚创建的id。来自 the docs 的示例:
INSERT INTO distributors (did, dname) VALUES (DEFAULT, 'XYZ Widgets')
RETURNING did;
您发布的代码不完整,甚至无法编译,因此我无法为您提供完整的示例如何在您的案例中使用它,但这里是一个开始:
NpgsqlCommand cmd = new NpgsqlCommand(
"INSERT INTO wsmsmrs210 " +
"(epiphanyKey,transaction,license,dateOfActv,time, conn) " +
"VALUES (...) " +
"RETURNING epiphanyKey");
int id = cmd.ExecuteScalar();
关于c# - 如何生成下一个主键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8357894/