您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關如何通過C#使用參數化和塊語句來提高批處理SQL語句的執(zhí)行效率,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
當你的項目要求你的程序對高達幾萬條的數據在集中的時間內執(zhí)行固定序列的操作,且不能完全使用存儲過程時而需要使用程序來執(zhí)行時。會需要這些優(yōu)化。 我們知道,SQL服務器對一條語句的執(zhí)行,需要分析、編譯、執(zhí)行這些步驟,通過參數化我們可以對一種命令只分析和編譯一次,而執(zhí)行多次,從而提高效率。在執(zhí)行時,如果每次提交語句,可以完成多條SQL語句,則可以減少通訊時間,也可以提高效率。
通過 System.Data.IDbCommand.Prepare() 方法,可以在第一次執(zhí)行語句時,分析和編譯SQL語句,然后保存這個Command對象,下次使用時,直接設置參數執(zhí)行。這個方法對Oracle和MsSql Server都有效。
如果執(zhí)行一批語句,在T-SQL和PLSQL中有一點不一樣。
在T-SQL中,多條SQL語句之間,使用分號";"分隔就行。
而在PLSQL中,則需要用 begin ... end; 包起來,中間語句用分號";"分隔。??Q3kmìLJ?www.netcsharp.cnú????7?ùm
相信這樣做之后,你的效率會有幾倍或者十幾倍的提升。當然,你還可以對只是查而修改的表,做一下緩存處理,來減小訪問數據庫的次數。
下面我示例一下訪問Oracle執(zhí)行PLSQL的一個函數的例子
sb.Append(@"delete from bak_WF_Log_EngineLog where FlowInstanceID= :instanceId;");
sb.Append(@"delete from bak_WF_Log_ErrLog where FlowInstanceID= :instanceId;");
sb.Append(@"delete from WF_Running_MsgForEngineBak where FlowInstanceID= :instanceId;");
sb.Append(@"delete from bak_WF_Running_MsgForUser where FlowInstanceID= :instanceId;");
sb.Append(@"delete from bak_WF_Running_FlowActivity where FlowInstanceID= :instanceId;");
sb.Append(@"delete from bak_WF_Running_FlowData where FlowInstanceID= :instanceId;");
sb.Append(@"delete from bak_WF_Running_FlowInstance where FlowInstanceID= :instanceId;");
sb.Append("end;");
//準備 DbCommand
this.cmdDeleteFlowInstanceData = cmd = new OracleCommand();
cmd.Connection = this.connEngine;
cmd.CommandType = CommandType.Text;
cmd.CommandText = sb.ToString();
cmd.Parameters.Clear();
cmd.Parameters.Add("instanceId", OracleType.VarChar,250);
//準備一下以提高性能。
cmd.Prepare();
}
//設置參數
cmd.Parameters["instanceId"].Value = flowinstanceid;
//設置事務
cmd.Transaction = this.tranEngine;
cmd.ExecuteNonQuery();
}
以上就是如何通過C#使用參數化和塊語句來提高批處理SQL語句的執(zhí)行效率,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。