|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
对于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楼,出乎意料的是大家居然纷纷写出自己的博文,还被编辑做成了专题,置于首页头条。 |
|