更新表A的情况:以下values表示传给存储过程的值数组
object[] values=new object[] {.....需要更新的各个字段对应的值};
object id=values[0];//假设第一个就是A表的ID_A
DataRow dr=dataSet.Tables["A"].Rows.Find(id);
dr.ItemArray=values;
dataSet.AcceptChanges();
更新C表也类似;以下是更新B表:
string condition="ID_A="+条件A+"ID_C="+条件C;//
DataRow[] drs=dataSet.Tables["B"].Select(condition);
foreach(DataRow dr in drs)
{
dr.ItemArray=values;
}
dataSet.AcceptChanges();
楼主试试看了

解决方案 »

  1.   

    在数据集架构文件中,建立主外键关系。
    在代码中确认:ds1.EnforceConstraints = true;
    在多表更新时,要区分插入、更新和删除的策略及其事务,插入、更新先主表后子表,删除先子表后主表。参照如下代码:
    private void btnSave_Click(object sender, System.EventArgs e)
    {
       if (ds1.HasChanges()) 
      {
         SqlConnection myConnection = new SqlConnection(UserInfo.DbConnectStr);
         myConnection.Open();    SqlCommand myCommand = myConnection.CreateCommand();
        SqlTransaction myTrans;    myTrans = myConnection.BeginTransaction();
        myCommand.Connection = myConnection;
        myCommand.Transaction = myTrans;
        try
        {
    dataAdapter1.Update(ds1.主表名.Select("", "", DataViewRowState.Added | DataViewRowState.ModifiedCurrent));
    dataAdapter2.Update(ds1.子表名);
    dataAdapter1.Update(ds11.主表名.Select("", "", DataViewRowState.Deleted));
    myTrans.Commit();
         }
         catch
    {
               try
    {
    myTrans.Rollback();
    }
    catch (SqlException ex)
    {
    if (myTrans.Connection != null)
    {
    MessageBox.Show("An exception of type " + ex.GetType() +
    " was encountered while attempting to roll back the transaction.");
    }
    }
    MessageBox.Show("An exception of type " + e.GetType() +
    " was encountered while inserting the data.");
    MessageBox.Show("Neither record was written to database.");
    }
    finally 
    {
    myConnection.Close();
    }
         }
    else
         MessageBox.Show("数据没有发生变化!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
      

  2.   

    91bct(路人)  skykevin(蓝屿) :谢谢你们的答复和建议,我研究下先这里漏说重要的一点:
    我的数据是在多层之间传递的,层与层之间是通过☆DataSet或☆DataTable传递数据。所以如果在数据访问层保存数据的话,返回给表示层的也是数据集或数据表(保存数据时也是如此)。所以最主要的问题是:(假如 A表 吧,如果A对B是OK的,那么C对B同理)【问题】1.如何使在保存A表的changes后并且更新changes中ID返回?
            2.如何将返回包含正确ID的changes结果集更新到表示层当前数据集?(我想过用DataSet的Merge方法,可是Merge是通过主键合并的,所以最终会导致两条重复记录)
    另外在表示层已经有设定关系的,即如果A表的主键更新,那么B表对应的A表外键也更新