c# - 如何生成下一个主键值

标签 c# winforms postgresql npgsql

我正在使用 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/

相关文章:

postgresql - "PostgreSQL Streaming Replication"适合这个用例吗?

c# - Windows 应用商店应用程序开发 - InvalidateRequerySuggested

c# - Silverlight TreeView ScrollBars 消失在 StackPanel 中

javascript - 如何判断请求是否应该呈现在服务器端? (ReactJS)

postgresql - 我将我的 RDS (psql) 数据库设置为不可公开访问,现在我无法使用 pgAdmin 连接到我的数据库。我现在如何连接到它?

django - 通过 Jenkins 在远程服务器 (AWS EC2) 上执行的构建脚本进行南模式和数据迁移

c# - 为什么我的 Kendo AutoComplete 小部件没有绑定(bind)到 JSON 对象?

c# - .NET WebBrowser 控件中的阻止对话框

c# - 调用 OnPropertyChange ("property_name") 向所有绑定(bind)属性发送更新

c# - C# 中的 BringToFront()