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 + "请稍后再试");
            }
        }