DataSet.AcceptChanges()后 SqlDataAdapter.Update(DataSet)时数据无法更新数据库 希望路过高人指点 谢谢了 或是DataSet.HasChanges=false ? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我是你下面的并发冲突的贴,还没解决,头痛。DataSet.AcceptChanges()好像放在update的后面。 放在update后面就起不到作用了我是GridView后一个汇总行在自动汇总数据时老是出现“不能通过已删除的行来访问该行信息”加上DataSet.AcceptChanges()后错误不再出现但是没有保存进数据库 没有DataSet.AcceptChanges()可以保存进数据库但是时不时地出现“不能通过已删除的行来访问该行信息” DataSet.AcceptChanges()之后当然更新不到数据库了。“不能通过已删除的行来访问该行信息”dr.delete()后当然不能再访问了。解决办法在统计时不要访问deleted行就行了。不知你统计是怎么自动的?应该有统计时写if(dr.RowState != DataRowState.Deleted){//......} 我是在界面汇总的GridView DataSet.AcceptChanges() 应该在你 Update 之后调用! 问题没有解决我的方法是 // //自动汇总 // private void dataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e) { try { DataGridView dgv = (DataGridView)sender; if (dgv.Tag == null || e.RowIndex < 0 || e.RowIndex == dgv.Rows.Count - 1) return; string col = dgv.Columns[e.ColumnIndex].DataPropertyName; // //年龄,雇佣放羊人和是否通电不用汇总 // if (col == "HaveElec" || col == "HireSheepHerder" || col == "Age") { return; } if (col == string.Empty) return; if (((DataRowView)dgv.Rows[e.RowIndex].DataBoundItem).Row.Table.Columns[col].DataType.IsValueType) { decimal tal = 0; foreach (DataGridViewRow dgvr in dgv.Rows) { if (dgvr.Index != dgv.Rows.Count - 1) { string hej = dgvr.Cells[e.ColumnIndex].Value.ToString(); if (hej != string.Empty) tal += decimal.Parse(hej); } } if (tal == 0) dgv[e.ColumnIndex, dgv.Rows.Count - 1].Value = DBNull.Value; else dgv[e.ColumnIndex, dgv.Rows.Count - 1].Value = tal; } } catch (Exception ex) { MessageBox.Show("自动汇总数据时出错" + ex.ToString(), "系统提示"); } } DataSet.AcceptChanges() 应该在你 Update 之后调用!后起不到作用和没用一样 我的并发问题自己刚解决了,好高兴。并发问题:你的已AcceptChanges()无关。前面数据库的细节问题,“不能通过已删除的行来访问该行信息‘之类的。1.主键。2。空内容。3。该删除的行 AcceptChanges就是把客户端数据行状态全部'Reset'成UnChanged状态。也就是等于说,就当客户端从数据库读取数据库后从来没有发生过任何改变,没有过增、删、改操作。 得先 Update 再 AcceptChanges update 和acceptchanges一般一前一后同时使用。update 根据rowstate提交数据,但是不更改rowstate.accept的功能如下:当调用 AcceptChanges 时,任何仍处于编辑模式的 DataRow 对象都将成功结束其编辑。每个 DataRow 的 RowState 属性也会随之更改;状态为 Added 和 Modified 的行的状态将变为 Unchanged,状态为 Deleted 的行则被移除。acceptchanges 不是用了等与没用。而是它的效果,你通过数据集和数据库是看不出来的,它是搞暗箱操作的。你可以通过rows[0].delete 然后dataview.rowstatefilter() 在之前和之后分别用用,你就可以看出它的效果了。 C# 多线程处理 c#如何按行读取mysql里某字段的内容 每隔几秒报警一次,直到用户在界面关掉这个报警 视频上画线 C# outLook插件安装问题 敏感信息 一个简单的问题,新人,请指教! 请问我现在C#里要调用VC编的DLL文件,那些VC编的头文件还要用到吗? .net中C#语言,怎么从数据库中读出一个数,显示到文本框中 C#运行时的一个错误,新手不懂哇 请问怎样让webbrowser刷新指定的框架,及有自动完成功能 textbox中只输入年和月 如何输入datatime格式的数据库中?
DataSet.AcceptChanges()好像放在update的后面。
我是GridView后一个汇总行在自动汇总数据时老是出现“不能通过已删除的行来访问该行信息”
加上DataSet.AcceptChanges()后错误不再出现
但是没有保存进数据库
但是时不时地出现“不能通过已删除的行来访问该行信息”
dr.delete()后当然不能再访问了。解决办法在统计时不要访问deleted行就行了。不知你统计是怎么自动的?
应该有统计时写if(dr.RowState != DataRowState.Deleted)
{
//......
}
我的方法是
//
//自动汇总
//
private void dataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
try
{
DataGridView dgv = (DataGridView)sender;
if (dgv.Tag == null || e.RowIndex < 0 || e.RowIndex == dgv.Rows.Count - 1) return; string col = dgv.Columns[e.ColumnIndex].DataPropertyName;
//
//年龄,雇佣放羊人和是否通电不用汇总
//
if (col == "HaveElec" || col == "HireSheepHerder" || col == "Age")
{
return;
}
if (col == string.Empty) return;
if (((DataRowView)dgv.Rows[e.RowIndex].DataBoundItem).Row.Table.Columns[col].DataType.IsValueType)
{
decimal tal = 0;
foreach (DataGridViewRow dgvr in dgv.Rows)
{ if (dgvr.Index != dgv.Rows.Count - 1)
{
string hej = dgvr.Cells[e.ColumnIndex].Value.ToString();
if (hej != string.Empty) tal += decimal.Parse(hej);
}
}
if (tal == 0)
dgv[e.ColumnIndex, dgv.Rows.Count - 1].Value = DBNull.Value;
else
dgv[e.ColumnIndex, dgv.Rows.Count - 1].Value = tal;
}
}
catch (Exception ex)
{
MessageBox.Show("自动汇总数据时出错" + ex.ToString(), "系统提示");
} }
和没用一样
你的已AcceptChanges()无关。前面数据库的细节问题,“不能通过已删除的行来访问该行信息‘之类的。
1.主键。2。空内容。3。该删除的行
update 根据rowstate提交数据,但是不更改rowstate.
accept的功能如下:
当调用 AcceptChanges 时,任何仍处于编辑模式的 DataRow 对象都将成功结束其编辑。每个 DataRow 的 RowState 属性也会随之更改;状态为 Added 和 Modified 的行的状态将变为 Unchanged,状态为 Deleted 的行则被移除。acceptchanges 不是用了等与没用。而是它的效果,你通过数据集和数据库是看不出来的,它是搞暗箱操作的。你可以通过rows[0].delete 然后dataview.rowstatefilter() 在之前和之后分别用用,你就可以看出它的效果了。