关键词:
【中文标题】当 RowState = Modified 时 SQLDataAdapter.Update() 不更新【英文标题】:SQLDataAdapter.Update() not Updating when RowState = Modified 【发布时间】:2018-05-15 16:41:39 【问题描述】:我正在尝试设置一个程序,当用户更新项目描述时,将在保存表单时更新数据库。我已经设置了我发现所需的所有内容,但适配器从未更新。它选择和插入很棒,但从不更新。代码如下:
internal void UpdateDB(DataTable Items)
using ( var ItemsAdapter = new SqlDataAdapter("select * from dbo.Items", Properties.Settings.Default.ConnectionString) )
using ( var ItemsCB = new SqlCommandBuilder(ItemsAdapter) )
ItemsAdapter.UpdateCommand = ItemsCB.GetUpdateCommand(true);
ItemsAdapter.InsertCommand = ItemsCB.GetInsertCommand(true);
ItemsAdapter.DeleteCommand = ItemsCB.GetDeleteCommand(true);
ItemsAdapter.AcceptChangesDuringUpdate = true;
foreach ( DataRow Row in Items.AsEnumerable() )
if ( !_Items.TableContains("Item", Row["Item"]) )
Row.AcceptChanges(); Row.SetAdded();
else if ( _Items.TableContains("Item", Row["Item"]) )
Row.AcceptChanges(); Row.SetModified();
ItemsAdapter.Update(Items);
_LoadAll();
.TableContains()
扩展是我构建的一个自制扩展,用于检查表以查看值是否存在。它运行完美,并将已存在 PK 的行设置为已修改,将不存在 PK 的行设置为已添加。
public static bool TableContains(this DataTable DT, string ColumnName, object ItemtoCheck)
return DT.AsEnumerable()
.Select(r => r.Field<string>(ColumnName))
.ToList()
.FindIndex(x => x.Equals(ItemtoCheck.ToString(), StringComparison.OrdinalIgnoreCase)) != -1;
_LoadAll();
方法只是在对数据库进行更改后重新加载所有DataTables
的方法。
【问题讨论】:
【参考方案1】:我发现我做错了什么。我正在使用一个具有null
引用作为其原始行值的表,当SQLDataAdapter.Update()
运行时,它正在寻找具有null
值的行,该值不存在因此被忽略。为了解决这个问题,我改变了我的“项目”表逻辑如下:
ItemsAdapter.AcceptChangesDuringUpdate = true;
foreach ( DataRow Row in Items.AsEnumerable() )
if ( !_Items.TableContains("Item", Row["Item"]) )
ItemsTable.Rows.Add(Row);
else if ( _Items.TableContains("Item", Row["Item"]) )
ItemsTable.AsEnumerable()
.Join(Items.AsEnumerable(), r1 => r1.ItemArray[0], r2 => r2.ItemArray[0], (r1, r2) => new r1, r2 )
.ToList()
.ForEach(i => i.r1.SetField(1, i.r2.ItemArray[1]));
ItemsAdapter.Update(ItemsTable);
此更改将传递给更新方法的新表设置为将包含数据库值的内部DataTable
更新为新的更新,然后使用它来更新数据库并且它正常工作。
希望这可以帮助任何可能最终遇到与我相同的问题的人。
【讨论】:
在不更改原始 RowState 的情况下对数据集中的数据表进行排序
】在不更改原始RowState的情况下对数据集中的数据表进行排序【英文标题】:SortingDatatableinDatasetwithoutchangingtheOriginalRowState【发布时间】:2012-08-2522:25:57【问题描述】:我有一个数据集,其中有2个表可用。这些表是在加载页面时... 查看详情
DataGridViewComboBoxColumn 值更改不会将 RowState 更改为已修改
】DataGridViewComboBoxColumn值更改不会将RowState更改为已修改【英文标题】:DataGridViewComboBoxColumnvaluechangenotchangingRowStatetomodified【发布时间】:2012-10-2910:01:08【问题描述】:我在我的数据网格视图中添加了一个查找组合框。对现有行... 查看详情
dynamics ax 2012:将 RowState 从 Edit 更改为 Selected
】dynamicsax2012:将RowState从Edit更改为Selected【英文标题】:dynamicsax2012:ChangeRowStatefromEdittoSelected【发布时间】:2011-12-2113:14:58【问题描述】:在AXGridView中,我想改变选中行的行状态,从编辑模式变为选中模式。这需要在单击外部... 查看详情
If-None-Match 有效时 304 Not Modified
】If-None-Match有效时304NotModified【英文标题】:304NotModifiedWhenIf-None-Matchisvalid【发布时间】:2014-07-2218:21:25【问题描述】:我正在优化一个ExpressJSONAPI以供iOS和Android应用使用,当应用在If-None-Match标头中指定etag时,似乎无法让Express... 查看详情
浏览器缓存详解:expires,cache-control,last-modified,etag详细说明
...了一个草图: 每个状态的详细说明如下:1、Last-Modified在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记(HttpReponseHeader)此文件在服务期端最后被修改... 查看详情
RowState.Added 和 DataRowVersion.Original 有啥区别
】RowState.Added和DataRowVersion.Original有啥区别【英文标题】:WhatisthedifferencebetweenRowState.AddedandDataRowVersion.OriginalRowState.Added和DataRowVersion.Original有什么区别【发布时间】:2018-02-1317:22:48【问题描述】:我有一个具有3个条件的函数:如... 查看详情
为啥在发送 If-Modified-Since 标头时 Varnish 不发送未修改的 304?
】为啥在发送If-Modified-Since标头时Varnish不发送未修改的304?【英文标题】:Whyisn\'tVarnishsending304unmodifiedwhenIf-Modified-Sinceheaderissent?为什么在发送If-Modified-Since标头时Varnish不发送未修改的304?【发布时间】:2012-03-1303:42:20【问题描... 查看详情
Winforms Databound Combobox 更新数据但不改变 RowState
】WinformsDataboundCombobox更新数据但不改变RowState【英文标题】:WinformsDataboundComboboxupdatesdatabutdoesnotchangeRowState【发布时间】:2021-01-2120:09:26【问题描述】:.NET4.7.2Winformsc#有一个包含一堆组合框的表单。所有人的下拉列表。组合框... 查看详情
绑定到 DataRowView 的 Winforms 控件更改行值但不更改 RowState
】绑定到DataRowView的Winforms控件更改行值但不更改RowState【英文标题】:WinformsControlBoundToDataRowViewChangesRowValuesButNotRowState【发布时间】:2019-12-2905:29:34【问题描述】:一个简单的WinForms应用程序,用于了解控件数据绑定。下面的代... 查看详情
当 regex101 匹配时,RegEx C# 不匹配
】当regex101匹配时,RegExC#不匹配【英文标题】:RegExC#doesntMatchwhenregex101does【发布时间】:2018-08-1220:43:50【问题描述】:这是我的模式:-8\\s+((?:[0-9]2\\/[0-9]2\\/[0-9]2)\\s+(?:[0-9]2:[0-9]2:[0-9]2))\\s+(?:LINE)\\s+=\\s+([0-9]0,9)\\s+(?:STN)\\s+=\\s+( 查看详情
我的输入处理寻找“S”,但是当我输入“S”时,脚本就终止了
】我的输入处理寻找“S”,但是当我输入“S”时,脚本就终止了【英文标题】:Myinputhandlinglooksfor"S",butwhenItype"S"thescriptjustterminates【发布时间】:2021-06-2515:13:52【问题描述】:我尝试制作一个UNO分发系统,但它似... 查看详情
有n个并发进程,设s是用于互斥信号量,其初值s=3,当s=-2时,意味着(),执行一个p(s)操作
有N个并发进程,设s是用于互斥信号量,其初值s=3,当s=-2时,意味着(),执行一个P(s)操作,后果();当s=-2时,执行一个V(s)操作,后果(),当s=0时,意味着()参考技术A去23454556678 查看详情
Etags 和 last-modified over https SSL?
】Etags和last-modifiedoverhttpsSSL?【英文标题】:Etagsandlast-modifiedoverhttpsSSL?【发布时间】:2013-10-0617:42:19【问题描述】:是否可以通过安全的HTTPS连接对条件GET请求使用HTTP缓存?我已经通过非安全HTTP进行缓存,但是当我切换到HTTPS... 查看详情
文件下载的缓存策略(代码片段)
文件缓存:ETag或Last-Modified判断文件缓存是否有效如果服务器端的资源没有变化,则自动返回HTTP304(NotChanged.)状态码,内容为空,这样就节省了传输数据量。当服务器端代码发生改变或者重启服务器时,则重新发出资源,返回... 查看详情
Gridview 在 RowDataBound 上动态添加行,具有相同的 RowState(Alternate 或 Normal)
】Gridview在RowDataBound上动态添加行,具有相同的RowState(Alternate或Normal)【英文标题】:GridviewaddingrowdynamicallyonRowDataBoundwiththesameRowState(AlternateorNormal)【发布时间】:2012-01-1716:39:12【问题描述】:我根据RowDataBound事件当前绑定的Row... 查看详情
当字段值 = 1 时更改背景颜色的 s-s-rS 问题
】当字段值=1时更改背景颜色的s-s-rS问题【英文标题】:s-s-rSIssuewithChangingBackgroundColourwhenfieldvalue=1【发布时间】:2016-02-1214:47:31【问题描述】:目前我正在设置我的表格,如果值为1,则将单元格的颜色更改为蓝色。我使用以下... 查看详情
s-s-rS 报告 - 当用户单击全选选项时,在参数中显示“全部”
】s-s-rS报告-当用户单击全选选项时,在参数中显示“全部”【英文标题】:s-s-rSReporting-show"All"inparameterwhentheuserclicksonSelectAlloption【发布时间】:2021-09-2118:18:03【问题描述】:当用户单击多选参数中的“全选”选项时,我... 查看详情
dbset.attach(实体)与dbcontext.entry(实体).state=entitystate.modified区别(代码片段)
...ate方法时,实体框架将你实体的所有属性标记为EntityState.Modified,所以跟踪它们。如果你只想更改部分属性,而不是全部属性,请使用DbSet.Attach。这种方法使你的所有属性EntityState.Unchanged,所以你必须使你的属性,你想更新EntityS... 查看详情