问题标签 [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.

0 投票
1 回答
1560 浏览

.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。

0 投票
8 回答
24292 浏览

sql - SqlDataAdapter.Fill() 超时 - 底层 Sproc 快速返回

我有一个 SqlDataAdapter 正在填充 21 行数据(4 列)。驱动它的存储过程在 SQL Mgmt Studio 中会在几秒钟内返回,但 .Fill() 需要 5 分钟。

有任何想法吗?

提前致谢!-克里斯

0 投票
2 回答
2088 浏览

c# - VS2005/VS2008 DataSet 设计器,在具有自动生成的 guid 列的表中插入一行

我有一个使用 VS2005/VS2008 数据集设计器创建的强类型数据表。

该表有一个主键列,它是一个 guid,由 SQL 服务器填充。问题是当我想向我的 DataTable 添加一行(或多行)然后调用DataAdapter.Update方法(传入 DataTable)时。当调用DataAdapter.Update时,我收到一条 SQL 异常,提示我无法将 NULL 插入主键列。

如何告诉设计人员这是一个自动生成的列,我不想为新行提供值?我只想要 SQL 生成的值。

我在这里遗漏了什么,或者这是 DataSet 设计器的限制?

我知道如何使用 LINQ to SQL 来实现这一点,但不幸的是,我无法为这个项目使用它。

0 投票
1 回答
1891 浏览

.net - SqlDataAdapter.Update 不起作用

我正在使用 SqlDataAdapter.Update(DataTable) 在数据库中抛出一个表,但是 SqlDataAdapter 忽略了我的 InsertCommand 来编写它自己的,它只发送主键和所有可以为空的行,如果他们想要的话。我如何让它表现出来?

我在调用 Update() 之前和之后单步执行代码。之前,它是我的 InsertCommand。之后,它是 SqlDataAdapter 的。

编辑:我不是特别想发布代码示例,因为我可以使用我拥有的行并编写我自己的 SqlCommand 对象,该对象很容易工作。我更感兴趣的是为什么 Update 会决定我传递的 InsertCommand 不够好,所以我可以去挖掘我自己的代码——这整个事情应该是一个节省时间的事情。

0 投票
2 回答
4203 浏览

c# - SQLiteDataAdapter 未填充指定的 DataTable

我正在尝试从 SQLite 数据库中提取一些数据,以便可以在我的 GUI 中填充 GridView:这是返回 DataTable 的代码:

出于某种原因,调用后adapter.Fill,DataTable 仍然没有填充任何内容。到目前为止,我已经验证了命令文本是正确的,并且连接包含正确的连接字符串。两者都在应用程序的其他部分成功使用。似乎没有抛出异常......我还有什么地方应该找麻烦吗?我是否错误地使用了 API?

谢谢!

0 投票
3 回答
1292 浏览

.net - .NET 数据适配器超时 SP 问题

我们有一个 SQL Server 存储过程,可以直接在 SQL Manager 中正常运行,进行相当大的计算,但最多只需要 50-10 秒即可运行。

但是,当我们通过数据适配器从 .NET 应用程序调用它时,它会超时。然而超时发生在超时时间之前,我们将它设置为 60 秒,它仍然会在大约 20 秒或更短的时间内超时。

我已经用谷歌搜索了这个问题,并看到其他人注意到 SP 直接工作但通过数据适配器调用很慢的问题。

关于如何解决这个问题的任何想法?

0 投票
1 回答
1236 浏览

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 测试:

输出:

下一个测试:

输出:

0 投票
1 回答
6434 浏览

c# - DataAdapter 更新方法 - 它使用哪个连接?

抱歉这个可能很愚蠢的问题。由于我在互联网上没有发现任何关于它的信息,它可能非常明显,我只是盲目地看到?!

我正在尝试通过 DataAdapter.Update(dataset) 从数据集中更新数据库中的表

但是没有设置连接的可能性,DA 应该使用。

DA 在哪里知道如何连接到 DB?还是我误解了数据适配器的概念?

我目前的代码是这样的:

我刚写了这个并且开始怀疑它是如何(或是否)工作的......到目前为止我还没有测试过它,因为我必须编写一些其他代码才能正确测试它

谢谢大家,StackOverflow FTW!

0 投票
2 回答
3356 浏览

.net - 在数据源中删除的行的 DataAdapter.Fill() 行为

我正在使用DataSet//体系结构在数据库DataTableDataAdapter我的模型对象之间进行调解,这些对象有自己的支持(它们不受 DataRow 支持)。我有一个DataAdapterwith 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即使该行相同;这是一个安全的假设吗?
  • 我对这一切都错了吗?
0 投票
2 回答
6967 浏览

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