数据集和数据库的同步-DataAdapter的使用
时间:2010-11-12 来源:itcfj
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.btnUpdate.Click += new System.EventHandler(this.btnUpdate_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void btnUpdate_Click(object sender, System.EventArgs e)
{
// Create the DataSet and DataAdapter
SqlConnection myConnection = new SqlConnection( "server=(local);uid=sa;pwd=111;database=Pubs" );
DataSet myDataSet = new DataSet();
SqlDataAdapter myDataAdapter = new SqlDataAdapter("Select * From Authors", myConnection );
//
myDataAdapter.RowUpdating += new SqlRowUpdatingEventHandler(MyUpdatingHandler);
myDataAdapter.RowUpdated += new SqlRowUpdatedEventHandler(MyUpdatedHandler);
myDataAdapter.Fill( myDataSet, "Authors" );
// Change value of first row
myDataSet.Tables[ "Authors" ].Rows[ 0 ][ "au_fname" ] = "Johns";
// Update the Database Table
SqlCommandBuilder myBuilder = new SqlCommandBuilder( myDataAdapter );
myDataAdapter.Update( myDataSet, "Authors" );
dgShow.DataSource = myDataSet.Tables[0].DefaultView;
dgShow.DataBind();
}
public void MyUpdatingHandler(object adapter,SqlRowUpdatingEventArgs e)
{
switch(e.StatementType)
{
case StatementType.Update:
{
SqlConnection myConnection = new SqlConnection( "server=(local);uid=sa;pwd=111;database=Pubs" );
string strSql = "Select * From Authors where au_fname='"
+e.Row["au_fname",DataRowVersion.Original]+"'";
SqlCommand com = new SqlCommand(strSql,myConnection);
myConnection.Open();
if(com.ExecuteNonQuery()==0)
{
Response.Write("出错!有用户已经修改过数据集!");
e.Status = UpdateStatus.ErrorsOccurred;//报错
}
myConnection.Close();
break;
}
}
}
public void MyUpdatedHandler(object adapter,SqlRowUpdatedEventArgs e)
{
switch(e.StatementType)
{
case StatementType.Update:
if(e.Status==UpdateStatus.ErrorsOccurred)
e.Status = UpdateStatus.SkipCurrentRow;
break;
}
}
}
}