更新表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();
楼主试试看了
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();
楼主试试看了
在代码中确认: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);
我的数据是在多层之间传递的,层与层之间是通过☆DataSet或☆DataTable传递数据。所以如果在数据访问层保存数据的话,返回给表示层的也是数据集或数据表(保存数据时也是如此)。所以最主要的问题是:(假如 A表 吧,如果A对B是OK的,那么C对B同理)【问题】1.如何使在保存A表的changes后并且更新changes中ID返回?
2.如何将返回包含正确ID的changes结果集更新到表示层当前数据集?(我想过用DataSet的Merge方法,可是Merge是通过主键合并的,所以最终会导致两条重复记录)
另外在表示层已经有设定关系的,即如果A表的主键更新,那么B表对应的A表外键也更新