我尝试使用以下sql将新id作为out-parameter值返回时插入新记录:
Insert into ERRORS ( ErrorId, Date, ErrorInfo ) values ( :ItemDate, :Text ) returning ErrorId into :ID
我收到以下错误:
Npgsql.NpgsqlException occurred
BaseMessage=syntax error at or near "into"
Code=42601
ColumnName=""
ConstraintName=""
DataTypeName=""
Detail=""
ErrorCode=-2147467259
ErrorSql=Insert into ERRORS ( ErrorId, Date, ErrorInfo ) values ( (('2014-04-02 08:16:36.045969')::timestamp), (('Test 333 4/2/2014 8:16:36 AM')::text) ) returning ErrorId into
File=src\backend\parser\scan.l
Hint=""
HResult=-2147467259
Line=1053
Message=ERROR: 42601: syntax error at or near "into"
Position=168
Routine=scanner_yyerror
SchemaName=""
Severity=ERROR
Source=Npgsql
TableName=""
Where=""
StackTrace:
at Npgsql.NpgsqlState.<ProcessBackendResponses_Ver_3>d__9.MoveNext()
at Npgsql.ForwardsOnlyDataReader.GetNextResponseObject(Boolean cleanup)
at Npgsql.ForwardsOnlyDataReader.GetNextRowDescription()
at Npgsql.ForwardsOnlyDataReader.NextResultInternal()
at Npgsql.ForwardsOnlyDataReader..ctor(IEnumerable`1 dataEnumeration, CommandBehavior behavior, NpgsqlCommand command, NotificationThreadBlock threadBlock, Boolean preparedStatement, NpgsqlRowDescription rowDescription)
at Npgsql.NpgsqlCommand.GetReader(CommandBehavior cb)
at Npgsql.NpgsqlCommand.ExecuteNonQuery()
at FrozenElephant.Symbiotic.ObjectWriter.Create(IDatabaseTypesFactory factory, Object value, IDbTransaction transaction, Boolean performCommitClose) in E:\Dev\FrozenElephant\SymbioticORM\Symbiotic\Symbiotic\ObjectWriter.vb:line 423
InnerException:
我也尝试将最后一个&#34;删除到&#34;但也不起作用。
答案 0 :(得分:2)
您必须使用带有npgsql的ExecuteReader:
,而不是使用out参数NpgsqlCommand cmd = new NpgsqlCommand(@"Insert into ERRORS(Date, ErrorInfo) values(:ItemDate, :Text) returning ErrorId", conn);
...Add your inpout parameters...
NpgsqlDataReader reader = cmd.ExecuteReader();
int errorId;
while (reader.Read())
{
errorId = reader.GetInt32(0));
}
答案 1 :(得分:0)
此示例SQL将生成一个结果集,其中包含一个包含新ErrorId的行:
CREATE TABLE errors(ErrorId SERIAL, date TIMESTAMP, ErrorInfo VARCHAR(100));
INSERT INTO errors(Date, ErrorInfo)
VALUES (now(), 'abc')
RETURNING ErrorId
表达式的一个问题是插入列表中有ErrorId,但不是它的值。