У меня есть INSERT
с одним параметром VARCHAR
.SQL выглядит так:
INSERT INTO FLAGS (TIME_STAMP, FLAG)
SELECT SUBSTRING(@s1 FROM 1 FOR 23), SUBSTRING(@s1 FROM 24 FOR 2)
FROM RDB$DATABASE;
И способ отправки выглядит следующим образом:
using (FbConnection connection = new FbConnection(ConnectionString))
{
try
{
connection.Open();
var transaction = connection.BeginTransaction();
var command = new FbCommand(sqlCommand, connection, transaction);
command.Parameters.Add("@s1", "2018-09-12 08:37:51.00083");
command.ExecuteNonQuery();
transaction.Commit();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
Столбец TIME_STAMP
равен TIMESTAMP
, а столбец FLAG
равен INTEGER
.В реальном приложении в INSERT будет несколько строк, а не одна.Также будет больше столбцов, поэтому я хотел бы, чтобы количество параметров для одной строки было как можно меньше.
Если я запускаю этот код, он дает мне:
Exception thrown: 'System.FormatException' in FirebirdSql.Data.FirebirdClient.dll
Если яизмените команду следующим образом:
INSERT INTO FLAGS (TIME_STAMP, FLAG)
SELECT SUBSTRING(@s1 FROM 1 FOR 23), CAST(SUBSTRING(@s1 FROM 24 FOR 2) AS INTEGER)
FROM RDB$DATABASE;
Это дает мне эту ошибку:
Exception thrown: 'FirebirdSql.Data.FirebirdClient.FbException' in
FirebirdSql.Data.FirebirdClient.dll
Dynamic SQL Error
SQL error code = -804
Data type unknown
FWIR это должно быть возможно.По крайней мере, это работает в FlameRobin (версия с CAST
также работает):
SET TERM ^ ;
EXECUTE BLOCK AS
DECLARE s1 VARCHAR(25) = '2018-09-12 08:37:51.00083';
BEGIN
INSERT INTO FLAGS (TIME_STAMP, FLAG)
SELECT SUBSTRING(:s1 FROM 1 FOR 23), SUBSTRING(:s1 FROM 24 FOR 2)
FROM RDB$DATABASE;
END^
SET TERM ; ^
Может кто-нибудь направить меня в правильном направлении?
РЕДАКТИРОВАТЬ
Результат должен быть:
TIME_STAMP | FLAG
------------------------+-----
2018-09-12 08:37:51.000 | 83