m_dataadapter1,m_dataadapter2,m_dataadapter3分别从3个表中取出数据在界面上显示,然后用户添加,删除、更改后更新数据库希望用事务。 下面代码返回“当分配给命令的连接处于挂起的本地事务中时,命令必须具有事务对象才能执行。该命令的 Transaction 属性尚未初始化” 经调试发现m_cb3.GetUpdateCommand();返回null
private void updatedata()
{
using (SqlTransaction m_trans = m_connection.BeginTransaction())
{
try
{
m_ds.Relations.Clear();
SqlCommandBuilder m_cb3 = new SqlCommandBuilder(m_dataadapter3);
{
m_dataadapter3.UpdateCommand = m_cb3.GetUpdateCommand();
m_dataadapter3.DeleteCommand = m_cb3.GetDeleteCommand();
m_dataadapter3.InsertCommand = m_cb3.GetInsertCommand();
}
SqlCommandBuilder m_cb2 = new SqlCommandBuilder(m_dataadapter2);
{
m_dataadapter2.UpdateCommand = m_cb2.GetUpdateCommand();
m_dataadapter2.DeleteCommand = m_cb2.GetDeleteCommand();
m_dataadapter2.InsertCommand = m_cb2.GetInsertCommand();
}
SqlCommandBuilder m_cb = new SqlCommandBuilder(m_dataadapter);
{
m_dataadapter.UpdateCommand = m_cb.GetUpdateCommand();
m_dataadapter.DeleteCommand = m_cb.GetDeleteCommand();
m_dataadapter.InsertCommand = m_cb.GetInsertCommand();
} m_dataadapter3.DeleteCommand.Transaction = m_trans;
m_dataadapter3.InsertCommand.Transaction = m_trans;
m_dataadapter3.UpdateCommand.Transaction = m_trans; m_dataadapter2.DeleteCommand.Transaction = m_trans;
m_dataadapter2.InsertCommand.Transaction = m_trans;
m_dataadapter2.UpdateCommand.Transaction = m_trans; m_dataadapter.DeleteCommand.Transaction = m_trans;
m_dataadapter.InsertCommand.Transaction = m_trans;
m_dataadapter.UpdateCommand.Transaction = m_trans; m_dataadapter3.Update(m_ds.Tables["userinfo"].Select("", "", DataViewRowState.Added));
m_dataadapter2.Update(m_ds.Tables["cardinfo"].Select("", "", DataViewRowState.Added));
m_dataadapter.Update (m_ds.Tables["carinfo"]. Select("", "", DataViewRowState.Added)); m_dataadapter3.Update(m_ds.Tables["userinfo"].Select("", "", DataViewRowState.ModifiedCurrent));
m_dataadapter2.Update(m_ds.Tables["cardinfo"].Select("", "", DataViewRowState.ModifiedCurrent));
m_dataadapter.Update (m_ds.Tables["carinfo"] .Select("", "", DataViewRowState.ModifiedCurrent)); m_dataadapter .Update(m_ds.Tables["carinfo"] .Select("", "", DataViewRowState.Deleted));
m_dataadapter2.Update(m_ds.Tables["cardinfo"].Select("", "", DataViewRowState.Deleted));
m_dataadapter3.Update(m_ds.Tables["userinfo"].Select("", "", DataViewRowState.Deleted));
m_trans.Commit();
m_cb3.Dispose();
m_cb2.Dispose();
m_cb.Dispose();
}
catch (SystemException ex)
{
m_trans.Rollback();
MessageBox.Show(ex.Message + "请稍后再试");
}
}
try
{
m_dataadapter.Dispose();
m_dataadapter2.Dispose();
m_dataadapter3.Dispose();
showdata();
}
catch (SystemException ex)
{
MessageBox.Show(ex.Message + "请稍后再试");
}
}
private void updatedata()
{
using (SqlTransaction m_trans = m_connection.BeginTransaction())
{
try
{
m_ds.Relations.Clear();
SqlCommandBuilder m_cb3 = new SqlCommandBuilder(m_dataadapter3);
{
m_dataadapter3.UpdateCommand = m_cb3.GetUpdateCommand();
m_dataadapter3.DeleteCommand = m_cb3.GetDeleteCommand();
m_dataadapter3.InsertCommand = m_cb3.GetInsertCommand();
}
SqlCommandBuilder m_cb2 = new SqlCommandBuilder(m_dataadapter2);
{
m_dataadapter2.UpdateCommand = m_cb2.GetUpdateCommand();
m_dataadapter2.DeleteCommand = m_cb2.GetDeleteCommand();
m_dataadapter2.InsertCommand = m_cb2.GetInsertCommand();
}
SqlCommandBuilder m_cb = new SqlCommandBuilder(m_dataadapter);
{
m_dataadapter.UpdateCommand = m_cb.GetUpdateCommand();
m_dataadapter.DeleteCommand = m_cb.GetDeleteCommand();
m_dataadapter.InsertCommand = m_cb.GetInsertCommand();
} m_dataadapter3.DeleteCommand.Transaction = m_trans;
m_dataadapter3.InsertCommand.Transaction = m_trans;
m_dataadapter3.UpdateCommand.Transaction = m_trans; m_dataadapter2.DeleteCommand.Transaction = m_trans;
m_dataadapter2.InsertCommand.Transaction = m_trans;
m_dataadapter2.UpdateCommand.Transaction = m_trans; m_dataadapter.DeleteCommand.Transaction = m_trans;
m_dataadapter.InsertCommand.Transaction = m_trans;
m_dataadapter.UpdateCommand.Transaction = m_trans; m_dataadapter3.Update(m_ds.Tables["userinfo"].Select("", "", DataViewRowState.Added));
m_dataadapter2.Update(m_ds.Tables["cardinfo"].Select("", "", DataViewRowState.Added));
m_dataadapter.Update (m_ds.Tables["carinfo"]. Select("", "", DataViewRowState.Added)); m_dataadapter3.Update(m_ds.Tables["userinfo"].Select("", "", DataViewRowState.ModifiedCurrent));
m_dataadapter2.Update(m_ds.Tables["cardinfo"].Select("", "", DataViewRowState.ModifiedCurrent));
m_dataadapter.Update (m_ds.Tables["carinfo"] .Select("", "", DataViewRowState.ModifiedCurrent)); m_dataadapter .Update(m_ds.Tables["carinfo"] .Select("", "", DataViewRowState.Deleted));
m_dataadapter2.Update(m_ds.Tables["cardinfo"].Select("", "", DataViewRowState.Deleted));
m_dataadapter3.Update(m_ds.Tables["userinfo"].Select("", "", DataViewRowState.Deleted));
m_trans.Commit();
m_cb3.Dispose();
m_cb2.Dispose();
m_cb.Dispose();
}
catch (SystemException ex)
{
m_trans.Rollback();
MessageBox.Show(ex.Message + "请稍后再试");
}
}
try
{
m_dataadapter.Dispose();
m_dataadapter2.Dispose();
m_dataadapter3.Dispose();
showdata();
}
catch (SystemException ex)
{
MessageBox.Show(ex.Message + "请稍后再试");
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货