2013-07-26 58 views
1

我正在開發一個應用程序,將使用firebird嵌入和/或postgres取決於用戶的複雜程度。嵌入firebird的觀點是應該有更少的安裝,防火牆,UAC等問題。到目前爲止,postgres就像走在雲端,但我已經與firebird碰到一個障礙。應用程序是.net和我正在使用此提供商http://www.firebirdsql.org/en/net-provider/版本3.0.2firebird嵌入多個插入使用.net提供者

一切技術上的工作,但與嵌入式火鳥我每秒只插入大約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 multiple insert queries against firebird database using isql或這裏http://www.firebirdfaq.org/faq336/

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(); 

有了這個東西,我得到的異常

Dynamic SQL Error 
SQL error code = -104 
Token unknown - line 1, column 5 
term 

是第一種方式的唯一途徑?它是如此緩慢:(

回答

4

你不需要set term聲明,這些都是isqlspecific thing所以儘量

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"; 
+0

非常感謝。這工作正常 –

1

艾因已經就如何解決這一問題的答案,但作爲一個解釋:命令行工具像ISQL需要知道什麼時候一個說法是完整的,可以被執行。他們用;作爲終結。但是PSQL塊(存儲過程和EXECUTE BLOCK裏面,;也是一個語句終止。

爲了保持ISQL工具從發送g向服務器發送不完整的語句(從而導致解析器錯誤),則存在命令SET TERM以切換命令行(isql)的語句終止符。現在isql不是唯一使用SET TERM的例子,例如flamerobin也支持它。

有了這樣的火鳥.NET提供其FbCommand對象的驅動程序,您正在執行一條語句,所以沒有必要聲明終止(也不是由火鳥服務器支持),爲此SET TERM是沒有必要,也不支持。

相關問題