winfrom 使用Update批量更新数据 问题!

ycl252999822 2012-04-25 05:31:57
实现效果

datatable
textbox - BindingSource -datagridview

将他们连起来,实现同步更新


批量更新方法 测试成功

/// <summary>
/// 批量更新数据
/// </summary>
/// <param name="dtt">数据源</param>
/// <param name="sql">sql</param>
public void UPDAT(DataTable dtt,string sql)
{
DataConn = new OleDbConnection(strConnection);
da = new OleDbDataAdapter();
da.SelectCommand = new OleDbCommand(sql, DataConn);
cb = new OleDbCommandBuilder(da);
cb.QuotePrefix = "[";
cb.QuoteSuffix = "]";
DataConn.Open();
try
{
t = da.Update(dtt.GetChanges());
if (t > 0)
{
MessageBox.Show("保存成功!共计更新" + t.ToString() + "条数据!");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
dtt.AcceptChanges();
}
finally
{
t = 0;
DataConn.Close();
}




问题1 如下: 在 datagridview 中测试,新增,修改,删除 基本没问题,但ddatagridview里面 如果只有一笔数据,删除后 保存提示错误 :

---------------------------

---------------------------
System.ArgumentNullException: 值不能为 null。

参数名: dataTable

在 System.Data.Common.DbDataAdapter.Update(DataTable dataTable)

在 IVCrd.DSdata.UPDAT(DataTable dtt, String sql) 位置 F:\开发\IVC\IVCrd\DSdata.cs:行号 77
---------------------------
确定
---------------------------


问题2 在textbox 里面 编辑数据后,点击保存

提示如下错误:

---------------------------

---------------------------
System.Data.DBConcurrencyException: 违反并发性: UpdateCommand 影响了预期 1 条记录中的 0 条。

在 System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)

在 System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)

在 System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)

在 System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable, DataTableMapping tableMapping)

在 System.Data.Common.DbDataAdapter.Update(DataTable dataTable)

在 IVCrd.DSdata.UPDAT(DataTable dtt, String sql) 位置 F:\开发\IVC\IVCrd\DSdata.cs:行号 77
---------------------------
确定
---------------------------

问题3 有时候在 删除 数据后 提示:


---------------------------

---------------------------
System.Data.DBConcurrencyException: 违反并发性: DeleteCommand 影响了预期 1 条记录中的 0 条。

在 System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)

在 System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)

在 System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)

在 System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable, DataTableMapping tableMapping)

在 System.Data.Common.DbDataAdapter.Update(DataTable dataTable)

在 IVCrd.DSdata.UPDAT(DataTable dtt, String sql) 位置 F:\开发\IVC\IVCrd\DSdata.cs:行号 77
---------------------------
确定
---------------------------
那位大哥帮帮忙啊
...全文
271 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
WAN 2012-04-26
  • 打赏
  • 举报
回复
dtt.AcceptChanges(); 这句不应该放在catch块内,应该放在try块内,Update语句之后
kunkun0921 2012-04-26
  • 打赏
  • 举报
回复
使用SqlDataAdapter的Fill方法填充DataTable,然后用DataTale绑定DataGridView,使用SqlDataAdapter的Update方法实现批量更新
cjh200102 2012-04-26
  • 打赏
  • 举报
回复
楼上正解。
也可以用事物

111,126

社区成员

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

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

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