程序員對(duì)ADO.NET技巧說明研究
ADO.NET提供了幾種命令執(zhí)行的不同方法以及優(yōu)化命令執(zhí)行的不同選項(xiàng)。下面包括一些ADO.NET技巧,它們是關(guān)于選擇***命令執(zhí)行以及如何提高執(zhí)行命令的性能,及他是怎么運(yùn)作的。
使用OleDbCommand的***實(shí)踐
不同.NET框架數(shù)據(jù)提供程序之間的命令執(zhí)行被盡可能標(biāo)準(zhǔn)化了。但是,數(shù)據(jù)提供程序之間仍然存在差異。下面給出一些技巧,可微調(diào)用于OLE DB的.NET框架數(shù)據(jù)提供程序的命令執(zhí)行。
1) 按照ODBC CALL語法使用CommandType.Text調(diào)用存儲(chǔ)過程。使用CommandType.StoredProcedure只是秘密地生成ODBC CALL語法。
2) 一定要設(shè)置OleDbParameter的類型、大小(如果適用)、以及精度和范圍(如果參數(shù)類型是numeric或decimal)。注意,如果不顯式提供參數(shù)信息,OleDbCommand會(huì)為每個(gè)執(zhí)行命令重新創(chuàng)建OLE DB參數(shù)訪問器。
使用SqlCommand的***實(shí)踐
使用SqlCommand執(zhí)行存儲(chǔ)過程的快速提示:ADO.NET技巧如果調(diào)用存儲(chǔ)過程,將SqlCommand的CommandType屬性指定為StoredProcedure的CommandType。這樣通過將該命令顯式標(biāo)識(shí)為存儲(chǔ)過程,就不需要在執(zhí)行之前分析命令。 #t#
使用Prepare方法
對(duì)于重復(fù)作用于數(shù)據(jù)源的參數(shù)化命令,Command.Prepare方法能提高性能。Prepare指示數(shù)據(jù)源為多次調(diào)用優(yōu)化指定的命令。要想有效利用Prepare,需要徹底理解數(shù)據(jù)源是如何響應(yīng)Prepare調(diào)用的。對(duì)于一些數(shù)據(jù)源(例如SQL Server 2000),命令是隱式優(yōu)化的,不必調(diào)用Prepare。對(duì)于其他(例如SQL Server 7.0)數(shù)據(jù)源,Prepare會(huì)比較有效。
顯式指定架構(gòu)和元數(shù)據(jù)
只要用戶沒有指定元數(shù)據(jù)信息,ADO.NET技巧的許多對(duì)象就會(huì)推斷元數(shù)據(jù)信息。下面是一些示例:
1) DataAdapter.Fill方法,如果DataSet中沒有表和列,DataAdapter.Fill方法會(huì)在DataSet中創(chuàng)建表和列。
2) CommandBuilder,它會(huì)為單表SELECT命令生成DataAdapter命令屬性。
3) CommandBuilder.DeriveParameters,ADO.NET技巧會(huì)填充Command對(duì)象的Parameters集合。
但是,每次用到這些特性,都會(huì)有性能損失。建議將這些特性主要用于設(shè)計(jì)時(shí)和即席應(yīng)用程序中。ADO.NET技巧在可能的情況下,顯式指定架構(gòu)和元數(shù)據(jù)。其中包括在DataSet中定義表和列、定義DataAdapter的Command屬性、以及為Command定義Parameter信息。