TableAdapter.Update时出错Rollback了,但RowState却已变成Unchange

sdxiong 2012-11-26 05:28:19
一个Master-Detail的Form,Detail有两条明细记录,
保存明细时 第一条记录成功保存,并且RowState自动变成了NoChange,
第二条记录不符合数据库的要求,整体Rollback了,

修正第二条记录并重新提交,因第一条记录的RowState已变成NoChange,所以第一条记录没有被提交。
刷新后,该Form就只有一条记录了。。。

请问这个问题,应该怎么处理??保存的代码如下:

		SqlConnection conn = new SqlConnection(t_订单TableAdapter.Connection.ConnectionString);
conn.Open();
SqlTransaction trans = conn.BeginTransaction();

t_订单TableAdapter.Connection = conn;
t_订单TableAdapter.Transaction = trans;

t_订单明细TableAdapter.Connection = conn;
t_订单明细TableAdapter.Transaction = trans;

try
{
t_订单TableAdapter.Update(sq_tbsDataSet.t_订单);
t_订单明细TableAdapter.Update(sq_tbsDataSet.t_订单明细);
}
catch (Exception ex)
{
trans.Rollback();
conn.Close();

MessageBox.Show("记录时出现错误", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return false;
}

trans.Commit();
conn.Close();

MessageBox.Show("记录已经成功保存", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return true;
...全文
183 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
atwt27 2013-01-21
  • 打赏
  • 举报
回复
有自增列吗?没有的话就好处理了。
1. 基类说明 1.1 基类结构图 1.2 基类说明 1.2.1 BaseEditClass BaseEditClass是所有单表编辑功能的基类。BaseEditClass从NSGForm继承,以处理统一的界面和字体风格。 BaseEditClass抽象出了编辑类功能通用的方法并定义为基类方法,以便子类继承,并增加自己的代码。  自定义属性 名称 说明 DataTable 功能所编辑的数据表 DataState 功能所处的状态:浏览(dsBrowse)、新增(dsInsert)、编辑(dsEdit) BatchSave 是否批量提交数据表,默认为False DeleteWarn 在删除记录是否提示,默认为True  自定义方法 名称 说明 FormInit 在FormLoad被调用,具体功能中可重载该方法添加自定义的初始化代码 PostData 具体功能中需要重载该方法,并调用具体的TableAdapter.Update(row),以保存数据至数据库。 RefreshData 统一的刷新数据表过程,具体功能中需要重载该方法,并调用具体的TableAdapter.Fill(DataTable),以查询数据 DataValid 统一的数据验证方法,在保存数据前被调用。具体功能中可重载该方法添加自定义的数据校验代码 NewRecord 在新增数据被调用,在具体过程中可重载该方法添加自定义的新增记录默认值 SaveData 保存数据的方法,具体功能中调用该过程保存数据 DeleteData 删除数据的方法,具体功能中调用该过程删除数据 CancelData 取消数据修改的方法,具体功能中调用该过程取消数据修改 1.2.2 BaseGridEdit BaseGridEdit是所有直接使用DataGridView进行编辑的功能的基类。BaseGridEdit从BaseEditClass继承。 自定义属性 名称 说明 Grid 编辑所用的DataGridView 自定义方法 名称 说明 RecordValid 统一的数据验证方法,在单条保存数据前被调用。具体功能中可重载该方法添加自定义的数据校验代码 1.2.3 BaseGridEditForm BaseGridEditForm是所有直接使用DataGridView进行编辑的功能的模板。所有直接使用DataGridView进行编辑的功能都需要从该模板拷贝后进行修改。 2. 模板使用方法 2.1 BaseGridEditForm 使用BaseGridEditForm需要按以下四步操作就可以得到需要的功能。 一、 先从BaseGridEditForm拷贝文件到工程后修改类名、命名空间 二、 在项目的数据集中增加TableAdapter,以查询需要维护的指定的数据表 三、 将DataGridView绑定到新增的数据表 四、 修改以下基类方法 名称 说明 构造方法 增加”DataTable属性=新增数据表”的代码 FormInit 增加需要的Form初始化代码,如RefreshData以获得数据 PostData 增加一行代码:新增的TableAdapter.Update(row) RefreshData 增加使用新增TableAdapter.Fill(DataTable)的代码,以获得查询数据。注意:代码需要写在IsRefreshData = true;和 IsRefreshData = false;语句的中间 RecordValid 增加自定义的数据校验语句。 NewRecord 增加自定义的新增数据默认值代码。

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧