若天明 发表于 2015-1-16 22:37:50

ASP.NET网页编程之利用 DataAdapter 实行批量更新

对于new隐藏成员的作用,往往是出于使用了一个第三方类库,而你又无法获得这个类库的源代码,当你继承这个类库的某个类时,你需要重新实现其中的一个方法,而又需要与父类中的函数使用同样的函数,这是就需要在自定义的子类中把那个同名函数(或成员)加上new标记,从而隐藏父类中同名的成员。实行摘自MSDN:
  在之前版本的ADO.NET中,利用DataSet中的变动来更新数据库时,DataAdapter的Update办法每次更新数据库的一行。由于该办法轮回会见指定DataTable中的行,以是,会反省每一个DataRow,断定是不是已修正。假如该行已修正,将依据该行的RowState属性值挪用响应的UpdateCommand、InsertCommand或DeleteCommand。每次行更新都触及收集与数据库之间的双向数据传输。
  在ADO.NET2.0中,DataAdapter公然了UpdateBatchSize属性。将UpdateBatchSize设置为正整数值将使对数据库的更新以指定巨细的批次举行发送。比方,假如将UpdateBatchSize设置为10,会将10个自力的语句组合在一同并作为一批提交。将UpdateBatchSize设置为0将招致DataAdapter利用服务器能够处置的最多量次的巨细。假如将其设置为1,则禁用批量更新,由于此时每次发送一行。
  实行十分年夜的批次大概会下降功能。因而,在完成使用程序之前,应测试最好的批次巨细设置。
  利用UpdateBatchSize属性
  启用了批量更新后,DataAdapter的UpdateCommand、InsertCommand和DeleteCommand的UpdatedRowSource属性值应设置为None或OutputParameters。在实行批量更新时,命令的FirstReturnedRecord或Both的UpdatedRowSource属性值有效。
  上面的历程演示怎样利用UpdateBatchSize属性。该历程接纳两个参数,一个DataSet工具,个中包括代表Production.ProductCategory表中的ProductCategoryID和Name字段的列,一个代表批次巨细的整数(批次中的行数)。该代码创立一个新的SqlDataAdapter工具,设置其UpdateCommand、InsertCommand和DeleteCommand属性。该代码假定DataSet工具已修正了行。它设置UpdateBatchSize属性并实行更新。
protectedvoidbtnUpdateAddress_Click(objectsender,EventArgse)
{
SqlDataAdapterEmpAdapter=newSqlDataAdapter();
DataTableEmpDT=newDataTable();
SqlConnectionDBConSelect=newSqlConnection();
SqlConnectionDBConUpdate=newSqlConnection();
SqlCommandSelectCommand=newSqlCommand();
SqlCommandUpdateCommand=newSqlCommand();
//Usingdifferentconnectionobjectsforselectandupdatesfromthe
//Northwinddatabase.
DBConSelect.ConnectionString=
ConfigurationManager.ConnectionStrings["DSN_NorthWind"].ConnectionString;
DBConUpdate.ConnectionString=
ConfigurationManager.ConnectionStrings["DSN_NorthWind"].ConnectionString;
//ReadingallrecordsfromtheEmployeestable
SelectCommand.CommandText="SELECTtop500*FROMEMPLOYEES";
SelectCommand.CommandType=CommandType.Text;
SelectCommand.Connection=DBConSelect;
UpdateCommand.CommandText="UPDATEEMPLOYEESSETAddress=@Address,"+
"City=@City,Region=@Region,Country=@Country";
UpdateCommand.CommandType=CommandType.Text;
UpdateCommand.Connection=DBConUpdate;
SqlParameterAddressParam;
AddressParam=newSqlParameter("@Address",
SqlDbType.VarChar,15,"Address");
SqlParameterCityParam;
CityParam=newSqlParameter("@City",SqlDbType.VarChar,15,"City");
SqlParameterRegionParam;
RegionParam=newSqlParameter("@Region",SqlDbType.VarChar,15,"Region");
SqlParameterCountryParam;
CountryParam=newSqlParameter("@Country",
SqlDbType.VarChar,15,"Country");
UpdateCommand.Parameters.Add(AddressParam);
UpdateCommand.Parameters.Add(CityParam);
UpdateCommand.Parameters.Add(RegionParam);
UpdateCommand.Parameters.Add(CountryParam);
//SettingupDataAdapterwiththeSelectandUpdateCommands
//TheSelectcommandwillbeusedtoretrieveallemployee
//informationfromtheNorthwinddatabaseandtheUpdatecommand
//willbeusedtosavechangesbacktothedatabase
EmpAdapter.SelectCommand=SelectCommand;
EmpAdapter.UpdateCommand=UpdateCommand;
EmpAdapter.Fill(EmpDT);
DBConSelect.Close();
//Loopingthroughallemployeerecordsandassigningthemthenew
//address
foreach(DataRowDRinEmpDT.Rows)
{
DR["Address"]="4445W77thStreet,Suite140";
DR["City"]="Edina";
DR["Region"]="Minnesota";
DR["Country"]="USA";
}
//AddinganeventhandlertolistentotheRowUpdatedevent.
//Thiseventwillwillfireaftereachbatchisexecuted
EmpAdapter.RowUpdated+=newSqlRowUpdatedEventHandler(OnRowUpdated);
lblCounter.Text="";
EmpAdapter.UpdateBatchSize=100;
//Itisimportanttosetthispropertyforbatchprocessingof
//updatedrecordssincebatchupdatesareincapableof
//updatingthesourcewithchangesfromthedatabase
UpdateCommand.UpdatedRowSource=UpdateRowSource.None;
try
{
DBConUpdate.Open();
EmpAdapter.Update(EmpDT);
}
catch(Exceptionex)
{
lblCounter.Text+=ex.Message+"<Br>";
}
finally
{
if(DBConUpdate.State==ConnectionState.Open)
{
DBConUpdate.Close();
}
}
}
privatevoidOnRowUpdated(objectsender,SqlRowUpdatedEventArgsargs)
{
lblCounter.Text+="Batchisprocessedtillrownumber="+
args.RowCount.ToString()+"<br>";
}
我感觉可以顶到50楼,出乎意料的是大家居然纷纷写出自己的博文,还被编辑做成了专题,置于首页头条。

山那边是海 发表于 2015-1-18 21:52:38

微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。

小女巫 发表于 2015-1-23 19:32:16

这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。

精灵巫婆 发表于 2015-1-31 19:38:36

是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。

再现理想 发表于 2015-2-6 21:30:11

对于中小项目来说.net技术是完全可以胜任,但为什么现在大型公司或网站都选择php或java呢?就是因为微软不够开放,没有提供从硬件到应用服务器再到业务应用的整套解决方案。

只想知道 发表于 2015-2-18 19:54:43

Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。

小妖女 发表于 2015-3-6 10:09:58

ASP.net的速度是ASP不能比拟的。ASP.net是编译语言,所以,当第一次加载的时候,它会把所有的程序进行编译(其中包括worker进程,还有对语法进行编译,形成一个程序集),当程序编译后,执行速度几乎为0。

分手快乐 发表于 2015-3-12 23:54:36

现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。

小魔女 发表于 2015-3-20 06:10:10

如今主流的Web服务器软件主要由IIS或Apache组成。IIS支持ASP且只能运行在Windows平台下,Apache支持PHP,CGI,JSP且可运行于多种平台,虽然Apache是世界使用排名第一的Web服务器平台。
页: [1]
查看完整版本: ASP.NET网页编程之利用 DataAdapter 实行批量更新