问题标签 [dataadapter]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - 设置 UpdateBatchSize 时要查找的内容
我有一个 .NET 应用程序,它将两个数据表与很多行(10,000+)合并。使用 DataAdapter.Update 命令时,很有可能对 SQL 表执行大量更新/插入操作。
现在,我将 Adapter UpdateBatchSize 属性设置为 200。VS 警告不要将此值设置得太高,因为它可能会降低性能。好的,明白了。
性能方面,设置此属性时我应该寻找什么?无论如何,更新大量行将花费大量时间。在我的机器(或数据库服务器)上运行它似乎不会花费太多时间,但我确信当系统加载其他项目时,这可能是一个问题。
有什么我可以在 Profiler 中寻找的东西吗?进行标准分析时,持续时间通常为 0。有时是命中 1 或 2(可能总共 20 次),在大约 20,000 次更新中,3-4 命中 20。CPU 为 0,除了命中 1-2 的一对. 有 2 条记录最多可达 10 条左右。读取始终为 2,写入始终为 0。
sql - SqlDataAdapter.Fill() 超时 - 底层 Sproc 快速返回
我有一个 SqlDataAdapter 正在填充 21 行数据(4 列)。驱动它的存储过程在 SQL Mgmt Studio 中会在几秒钟内返回,但 .Fill() 需要 5 分钟。
有任何想法吗?
提前致谢!-克里斯
c# - VS2005/VS2008 DataSet 设计器,在具有自动生成的 guid 列的表中插入一行
我有一个使用 VS2005/VS2008 数据集设计器创建的强类型数据表。
该表有一个主键列,它是一个 guid,由 SQL 服务器填充。问题是当我想向我的 DataTable 添加一行(或多行)然后调用DataAdapter.Update方法(传入 DataTable)时。当调用DataAdapter.Update时,我收到一条 SQL 异常,提示我无法将 NULL 插入主键列。
如何告诉设计人员这是一个自动生成的列,我不想为新行提供值?我只想要 SQL 生成的值。
我在这里遗漏了什么,或者这是 DataSet 设计器的限制?
我知道如何使用 LINQ to SQL 来实现这一点,但不幸的是,我无法为这个项目使用它。
.net - SqlDataAdapter.Update 不起作用
我正在使用 SqlDataAdapter.Update(DataTable) 在数据库中抛出一个表,但是 SqlDataAdapter 忽略了我的 InsertCommand 来编写它自己的,它只发送主键和所有可以为空的行,如果他们想要的话。我如何让它表现出来?
我在调用 Update() 之前和之后单步执行代码。之前,它是我的 InsertCommand。之后,它是 SqlDataAdapter 的。
编辑:我不是特别想发布代码示例,因为我可以使用我拥有的行并编写我自己的 SqlCommand 对象,该对象很容易工作。我更感兴趣的是为什么 Update 会决定我传递的 InsertCommand 不够好,所以我可以去挖掘我自己的代码——这整个事情应该是一个节省时间的事情。
c# - SQLiteDataAdapter 未填充指定的 DataTable
我正在尝试从 SQLite 数据库中提取一些数据,以便可以在我的 GUI 中填充 GridView:这是返回 DataTable 的代码:
出于某种原因,调用后adapter.Fill
,DataTable 仍然没有填充任何内容。到目前为止,我已经验证了命令文本是正确的,并且连接包含正确的连接字符串。两者都在应用程序的其他部分成功使用。似乎没有抛出异常......我还有什么地方应该找麻烦吗?我是否错误地使用了 API?
谢谢!
.net - .NET 数据适配器超时 SP 问题
我们有一个 SQL Server 存储过程,可以直接在 SQL Manager 中正常运行,进行相当大的计算,但最多只需要 50-10 秒即可运行。
但是,当我们通过数据适配器从 .NET 应用程序调用它时,它会超时。然而超时发生在超时时间之前,我们将它设置为 60 秒,它仍然会在大约 20 秒或更短的时间内超时。
我已经用谷歌搜索了这个问题,并看到其他人注意到 SP 直接工作但通过数据适配器调用很慢的问题。
关于如何解决这个问题的任何想法?
c# - 这是 DataTable API 中的错误吗?更改以“错误的顺序”存储/执行
编辑:无论您是否认为这是一个 .NET 错误,任何评论都将不胜感激。
我有一个错误,我设法将其简化为以下场景:
我有一个 DataTable,其中主键必须保持连续,例如,如果您在其他行之间插入一行,则必须首先增加后续行的 ID 以腾出空间,然后插入该行。
如果删除一行,则必须递减任何后续行的 ID 以填补表中该行留下的空白。
正常工作的测试用例
从表中的 3 行开始,ID 为 1、2 和 3。
然后删除ID=2,设置ID=2 where ID=3(填补空白);这工作正常。dataTable.GetChanges() 包含删除的行,然后是修改的行;当您运行 dataAdapter.Update(table) 时,它执行得很好。
不起作用的测试用例
但是,如果您从 2 行(ID 1 和 2)开始,则在 ID=2 的地方设置 ID=3,并插入 ID=2,然后提交(或接受)更改。这现在应该与第一次测试的状态相同。
然后您执行与之前相同的步骤,即删除 ID=2 并在 ID=3 的位置设置 ID=2,但现在 dataTable.GetChanges() 的顺序错误。第一行是修改的行,第二行是删除的行。然后,如果您尝试 dataAdapter.Update(table) ,它将违反主键 - 它尝试在删除之前将行修改为已经存在的行。
解决方法
我可以想到一个解决问题的方法,即强制它以便首先提交已删除的行,然后修改行,然后添加行。但是为什么会这样呢?还有其他解决方案吗?
我想我之前在字典中看到过类似的“问题”,如果你添加一些项目,然后删除,重新插入它们,那么它们将不会与你添加它们的顺序相同(当你枚举字典时)。
以下是两个显示问题的 NUnit 测试:
输出:
下一个测试:
输出:
c# - DataAdapter 更新方法 - 它使用哪个连接?
抱歉这个可能很愚蠢的问题。由于我在互联网上没有发现任何关于它的信息,它可能非常明显,我只是盲目地看到?!
我正在尝试通过 DataAdapter.Update(dataset) 从数据集中更新数据库中的表
但是没有设置连接的可能性,DA 应该使用。
DA 在哪里知道如何连接到 DB?还是我误解了数据适配器的概念?
我目前的代码是这样的:
我刚写了这个并且开始怀疑它是如何(或是否)工作的......到目前为止我还没有测试过它,因为我必须编写一些其他代码才能正确测试它
谢谢大家,StackOverflow FTW!
.net - 在数据源中删除的行的 DataAdapter.Fill() 行为
我正在使用DataSet
//体系结构在数据库DataTable
和DataAdapter
我的模型对象之间进行调解,这些对象有自己的支持(它们不受 DataRow 支持)。我有一个DataAdapter
with AcceptChangesDuringFill = False
, AcceptChangesDuringUpdate = False
, and FillLoadOption = OverwriteChanges
。以下是我DataAdapter
在这些条件下对模型的理解:
DataAdapter.Update()
DataRowState.Added
会导致InsertCommand
开火DataRowState.Modified
会导致UpdateCommand
开火DataRowState.Deleted
会导致DeleteCommand
开火
数据适配器.Fill()
- 返回结果集中的任何行,其主键对应于 中的现有行将
DataTable
用于更新该行,并且该行的状态将始终变为DataRowState.Modified
,即使返回的行与当前行相同 - 返回的结果集中任何主键不对应任何现有行的行都将用于创建新行,该行的状态将变为
DataRowState.Added
DataTable
与返回结果集中的行不对应的任何行都将保留在DataRowState.Unchanged
鉴于我对这个心智模型是正确的,假设我想用它Fill()
来注意数据源中已删除的行。另外,假设 的参数SelectCommand
不返回整个表。我猜我有两个选择:
- 找到所有应该由 更新
Fill()
但仍然存在的行DataRowState.Unchanged
(依赖于我上面未经测试的斜体假设)。这些行已在数据源中删除。 - 清除;
DataTable
之前的所有相关行Fill()
任何不再显示的行都已在数据源中删除。DataRowState.Added
这失去了与DataRowState.Modified
第一种方法保留的区别。
所以,我的问题:
- 我的上述模型是否
DataAdapter
正确,取决于我在顶部记录的属性值? - 我应该使用哪个选项来查找已删除的行?我更喜欢第一个,但这取决于我的假设,即所有返回的行都将设置为
DataRowState.Modified
即使该行相同;这是一个安全的假设吗? - 我对这一切都错了吗?
c# - .NET DataSet.HasChanges is incorrectly false
Has anybody come across ds.hasChanges() being false despite that the ds clearly has the changes while you check it at a breakpoint? I've been looking at it for quite a while and I can't see what is wrong...
Now when I set a breakpoint after the row with HasChanges and use DataSet Visualizer I can see that the DataSet has in fact changed, but HasChanges still returns false.
I'm sure I'm missing the obvious... can anybody see what I'm doing wrong?
Cheers