如果我单独尝试的话,插入和更新工作正常..
两者一起...发生错误()..
这是工作示例...
//INSERT ... is working!
string MySqlInsertUpdateCommand = $"INSERT INTO ic_plc_streams(plcidx, stream, mytimestamp,
streamlength) VALUES('{PlcIdx}',@stream,'{DateTime.Now}','{MyStream.Length}'); ";
//UPDATE ... is working!
string MySqlInsertUpdateCommand = $"UPDATE ic_plc_streams SET stream = @stream,
mytimestamp='{DateTime.Now}', streamlength='{MyStream.Length}' WHERE plcidx='{PlcIdx}'; ";
<br>
//runs twice...
using (var command = new NpgsqlCommand(MySqlInsertUpdateCommand, conn))
{
NpgsqlParameter param = command.CreateParameter();
param.ParameterName = "@stream";
param.NpgsqlDbType = NpgsqlTypes.NpgsqlDbType.Bytea;
param.Value = MyStream;
command.Parameters.Add(param);
conn.Open();
command.ExecuteNonQuery();
}
<br>
//not WORKING
//insert or update!
string MySqlInsertUpdateCommand = $"do $$ begin UPDATE ic_plc_streams SET stream = @stream,
mytimestamp='{DateTime.Now}', streamlength='{MyStream.Length}' WHERE plcidx='{PlcIdx}'; " +
$"if not found Then INSERT INTO ic_plc_streams(plcidx, stream, mytimestamp, streamlength)
VALUES('{PlcIdx}',@stream,'{DateTime.Now}','{MyStream.Length}'); " +
$"End if; end$$";
using (var command = new NpgsqlCommand(MySqlInsertUpdateCommand, conn))
{
NpgsqlParameter param = command.CreateParameter();
param.ParameterName = "@stream";
param.NpgsqlDbType = NpgsqlTypes.NpgsqlDbType.Bytea;
param.Value = MyStream;
command.Parameters.Add(param);
conn.Open();
command.ExecuteNonQuery();
}
Errormessage: (postgres 9.4)
{"42883: Operator existiert nicht: @ bytea"}
(UPDATE ic_plc_streams SET stream = @stream, mytimestamp='23.10.2023 14:27:54', streamlength='28' WHERE plcidx='0'
)
Kein Operator stimmt mit dem angegebenen Namen und den Argumenttypen überein. Sie müssen möglicherweise ausdrückliche Typumwandlungen hinzufügen.
也许有人可以帮忙...?
DO
块中没有参数。您可以创建一个真实的函数或过程。您还可以编写一个
upsert
语句来插入或更新记录。