Npgsql.PostgresException: '55000: 序列当前值 "student_folio_id_seq" 尚未在此会话中定义'

Npgsql.PostgresException: '55000: currval of sequence "student_folio_id_seq" is not yet defined in this session'

我是 C# 语法的新手,正在尝试在用户点击“插入”按钮时将数据插入到两个不同的 table 中。同时,第二个 Insert 语句需要获取第一个 Insert 语句的 id 作为外键。主键id自增

此 sql 在 PHP 中有效,但在 C# 中似乎无效,我收到此抛出错误消息 Npgsql.PostgresException: '55000: currval of sequence "student_folio_id_seq" is not yet在此会话中定义'。

C# Postgres db 的任何专家都可以给我建议语法错误的地方吗?如果能举例说明就好了。

这是我的代码:

 connection.Open();
 NpgsqlCommand cmd = new NpgsqlCommand();
 cmd.Connection = connection;

 cmd.CommandText = "INSERT INTO student_folio 
 (f_name,l_name,ic,dob,gender,remark)VALUES(@f_name, 
 @l_name,@ic,@dob,@gender,@remark) RETURNING id";

 cmd.CommandText = "INSERT INTO contact (s_id, address)VALUES((SELECT 
 currval(pg_get_serial_sequence('student_folio', 'id'))),@address) ";
 cmd.CommandType = CommandType.Text;

您似乎正试图用新的 dml 值重新分配您的 cmd.CommandText。试试这个。

connection.Open();
NpgsqlCommand cmd = new NpgsqlCommand();
cmd.Connection = connection;

cmd.CommandText = "INSERT INTO student_folio (f_name,l_name,ic,dob,gender,remark)VALUES(@f_name, @l_name,@ic,@dob,@gender,@remark) RETURNING id; " +
            "INSERT INTO contact (s_id, address)VALUES((SELECT currval(pg_get_serial_sequence('student_folio', 'id'))),@address);";     
cmd.CommandType = CommandType.Text;