firebird使用.net提供程序嵌入多个插入

Rea*_*ent 1 .net c# firebird firebird-embedded

我正在开发一个应用程序,它将使用firebird嵌入式和/或postgres,具体取决于用户的复杂程度.firebird嵌入式的论点是应该减少安装,防火墙,UAC等问题.到目前为止,postgres就像在云上行走一样,但我遇到了火鸟的路障.该应用程序是.net,我正在使用此提供程序http://www.firebirdsql.org/en/net-provider/版本3.0.2

一切都在技术上有效,但嵌入了firebird我每秒只插入大约100条记录,而postgres每秒超过3000条记录!使用postgres,我将大量的INSERT INTO ...语句作为一个命令启动,这很好.对于火鸟来说,它并不顺利.这是什么工作(慢慢地)

String query = @"INSERT INTO Customers(ID, Name, SiteID) VALUES(1,'delta',2);
INSERT INTO Customers(ID, Name, SiteID) VALUES(2,'phoenix',2);
";
FbScript fbs = new FbScript(query);
fbs.Parse();
FbConnection fbc = new FbConnection(ConnectionString);

FbBatchExecution fbe = new FbBatchExecution(fbc, fbs);
fbe.Execute(true);
Run Code Online (Sandbox Code Playgroud)

但是,我试图没有解析.类似于第二个答案的东西使用isql或者在这里http://www.firebirdfaq.org/faq336/ 对firebird数据库运行多个插入查询

String sql = @"set term ^ ;
EXECUTE BLOCK AS BEGIN
INSERT INTO Customers(ID, Name, SiteID) VALUES(1,'delta',2);
INSERT INTO Customers(ID, Name, SiteID) VALUES(2,'phoenix',2);
end^";

FbCommand cmd = new FbCommand();            
PrepareCommand(cmd, connection, (FbTransaction)null, CommandType.Text, sql, commandParameters, out mustCloseConnection);
cmd.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

有了这个,我得到了例外

Dynamic SQL Error
SQL error code = -104
Token unknown - line 1, column 5
term
Run Code Online (Sandbox Code Playgroud)

第一种方式是唯一的方法吗?它太慢了:(

ain*_*ain 5

你不需要这些set term陈述,这些都是isql 具体的.所以试试吧

String sql = @"EXECUTE BLOCK AS BEGIN
INSERT INTO Customers(ID, Name, SiteID) VALUES(1,'delta',2);
INSERT INTO Customers(ID, Name, SiteID) VALUES(2,'phoenix',2);
END";
Run Code Online (Sandbox Code Playgroud)