问题标签 [tableadapter]

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 投票
4 回答
2936 浏览

c# - 我应该使用表适配器吗?

我正在开展一个个人项目,以了解更多关于 C# 和 .NET 的信息,特别是创建一个利用数据库的应用程序(在我的例子中是 MS SQL Server 2008)。虽然我很欣赏并不总是有明确的“正确”做事方式,但考虑到在使用旧技术/想法或新技术/想法之间进行选择,我宁愿使用新的。例如,我对这个项目的目标之一是学习或至少熟悉 WPF,而不是像过去那样使用 WinForms。

在此基础上,在将数据保存到我的数据库并检索它方面,我一直在糊里糊涂,没有很大的方向。到目前为止,我已经设法让这两个工作都使用TableAdapters,但我觉得它们是“旧”的工作方式(我的基础是它们在 MSDN 上的 Visual Studio 2005 下列出)。首先,我在这个假设中正确吗?如果是这样,从数据库中保存和检索数据的新方法是什么?我将不胜感激每种方法提供的任何利弊。

我用谷歌搜索并广泛搜索了 MSDN,但我觉得我没有使用正确的搜索词,因为我只是成功地混淆了自己。

我可以使用 .NET 3.5、Visual Studio 2008 和 Microsoft SQL Server 2008。

任何指导将不胜感激。

0 投票
2 回答
66 浏览

.net - 重建 .SLN (VS2008) 时回滚的数据库更改

所以,伙计们。这里发生了一件有趣的事情。

我有一个用 VS2008 制作的 Windows 窗体应用程序,直到最近,它一直连接到 SQL Server 2008 数据库。我能够编辑、插入、删除或选择数据库中的任何各种表,并且提交了更改——每次我通过 SQL 查询对数据库进行更改时,该更改都会反映在数据库中。

然而,在过去的几天里,我已将数据库文件导入 VS studio .SLN,并将我的数据集数量从三个减少到一个(为方便起见,将不同的表组合在一起),现在——我对数据库不会提交。

我观察到以下行为:

1) 从表中插入或删除记录没有被提交——下次我运行我的程序时,删除的记录又回来了,任何插入的记录都消失了。以前,Insert 和 Delete 在运行时似乎会提交更改。

2) 使用 UPDATE 命令手动提交更改有效——添加的记录保留,删除的记录保留,但是......

3) 如果我出于某种原因重建解决方案,数据库会“重置”为我第一次更改数据库位置时的状态。

有没有人知道我现在正在做的不同的事情会产生这种行为?

0 投票
1 回答
1399 浏览

c# - 不接受 TableAdapter 中的参数

我目前正在尝试设置我的 TableAdapters,但它不允许我使用参数(这使得它非常无用) - 当我创建一个新查询时

它告诉我附近有一个 SQL 错误'@'...

我正在使用带有 C# 的 VS08 和使用 OleDB-Driver 的 Access-Database

0 投票
1 回答
1938 浏览

c# - 更新查询在表适配器中不起作用

我有一个表适配器,我想在其上查询数据库的更新。

但是当我尝试执行它时它不起作用

适配器还有其他一些用于选择或插入的查询,它们都工作得很好。

我检查了id是否正确,或者语句中的任何其他错误是否会导致它不起作用,但是我会得到一个异常,不是吗?

此外,如果我检查返回值,我会得到0- 所以查询实际上没有编辑任何行,但我看不出任何原因。id是正确的,该语句是在表适配器中正确创建的,它不会引发任何语法或任何错误......

我怎样才能更多地调试这个问题?

0 投票
2 回答
558 浏览

c# - 在绑定到 DataTable 的 ASP.NET GridView 中舍入数字的最佳方法是什么?

我有一个绑定到 DataTable 的 GridView,它又使用 TableAdapter,如下所示:

此网格视图显示许多列,其中包含数字。现在我必须用一位小数显示千位数字。

例如,数据库中的数字“24753”应该在gridview 中显示为“24,8”。

什么是最干净的完成方式?

0 投票
1 回答
199 浏览

.net - 插入时键入的数据集约束异常

基本上我有一个包含分层数据的表。

所以我有一个 id 列和一个汇总列,它指向每个孩子的父母的 id 列。

该表是使用 TableAdapter 上的 GetData() 从数据库加载的,然后使用以下方法设置表的主键自动增量:

选择 IDENT_CURRENT('TableName') + 1

在层次结构中创建新的孩子,然后我在同一个 TableAdapter 上调用 Update()。

大多数情况下,这工作得很好,但偶尔我会得到 ContraintException 列“id”被限制为唯一问题,并且它似乎只在添加新行时发​​生。

通常,我只需将 autoincrementseed 和 autoincrementstep 设置为 -1 并在更新 id 列后从数据库中获取正确的值,但是因为汇总列取决于主键值,所以这将不起作用。

我也不能实时应用每个新行,因为所有更改作为一个整体必须由用户在应用到数据库之前进行审查。

有任何想法吗?

编辑:我应该提一下,没有其他任何更改从任何其他来源进入此表,因此这里没有并发问题。

另一个编辑:今天我在调用更新方法之前检查了表中的值,并注意到问题与未在主键上正确排序的新行有关。

因此,例如行去了,960,961,963,962,当插入 962 时,我得到了 962 已经存在的错误。如果更新按顺序插入行,就不会发生这种情况。

为什么表会按主键不按顺序索引行?

0 投票
1 回答
1040 浏览

vb.net - 表适配器更新失败

我有一个 VB windows Form 项目,它连接到 Access DB 中的多个 DataTables。在我的表单上,我有几个绑定到这些源的文本框、组合框和日期时间选择器。特别是在一个表中,当我在编辑其中一个文本框后尝试更新 tableadapter 时,更新方法会失败。没有抛出异常,但是更新方法返回一个零值并且数据没有被更新。仅编辑组合框或日期时间选择器时更新起作用,但一旦编辑文本框,更新将不起作用。

项目中的其他数据表以相同的方式设置,但没有更新问题。我无法弄清楚这个特定的表会导致什么问题。谁能给我任何关于在哪里或解决什么问题的想法?

谢谢!

0 投票
1 回答
309 浏览

database - 更改 CommandText 更改参数

我正在尝试在 vb.net 的设计器中的 TableAdapter 中编辑插入命令的 CommandText。每当我对 CommandText 进行更改时,Visual Studio (2008) 会自动将参数更改为一个集合,该集合由编辑命令之前存在的一个参数组成,沉浸在一堆完整的垃圾参数中,然后我要么必须撤消(除非这个是我尝试编辑的第一件事,在这种情况下,我必须关闭设计器以放弃更改并重新打开它)或手动将所有参数更改回不完全垃圾的东西。

有没有人见过这样的事情,或者知道如何阻止 Visual Studio 谋杀我精心照料的参数?任何更改 CommandText 而不找到另一个理由来诅咒 M$ 的方法将不胜感激。

0 投票
7 回答
15941 浏览

c# - 从 TableAdapter 获取 @@IDENTITY

我正在尝试完成一项看似简单的任务,却变成了几个小时的冒险:@@IdentityTableAdapter.Insert().

这是我的代码:

一个答案表明我可能需要做的就是更改ExecuteMode. 我试过了。这使得GetData()退出工作(因为我现在返回一个标量而不是行数据)(我需要保留 GetData())。它也没有解决问题,insertedID 变量仍然设置为 1。

我尝试在 中创建第二个TableAdapter并将TypedDataSet.XSD该适配器的属性设置为“标量”,但它仍然失败,变量的值为 1。

生成的插入命令是

并且还设置了“刷新数据表”(在Insert和Update语句后添加select语句以检索身份)。

环境

SQL Server 2008 R2、Visual Studio 2010、.NET 4、Windows XP,都是本地同一台机器。

这是什么原因造成的?

编辑/更新

我想澄清一下我在 Visual Studio 中使用自动生成的代码。我不知道生成代码的“工具”是什么,但是如果您双击 *.XSD 文件,它会显示 SQL 表架构和关联的 TableAdapter 的 UI。我想继续使用自动生成的代码并以某种方式启用获取身份。我不想用存储过程手动编写这一切。

0 投票
3 回答
1822 浏览

sql-server - 表适配器查询给出了在 SQL Server Management Studio 中不可重现的错误

我正在维护一些在 Visual Studio 中的表适配器设计器中定义的查询,这些查询用于 Windows 窗体应用程序 (.NET 2.0) 中的一些报告中。当我运行应用程序并执行特定查询时,出现错误:将表达式转换为数据类型 smallmoney 的算术溢出错误。我很惊讶,因为查询应该产生相当小的数量,所以我使用 SQL 分析器捕获了查询,并在 SQL Server Management Studio 中运行了完全相同的查询(显然在同一个数据库上)。这里查询运行没有问题,smallmoney 是“33.00”;不在 214,748.3647 边界附近。

使调试复杂化,此问题仅发生在客户端的 QA 环境中,并且在本地无法重现(并且出于法律原因,无法将数据库复制到开发环境中)。这使得调试周期非常缓慢,因为在客户端环境中构建和部署新版本最多需要 30 分钟,所以我非常感谢一些提示,这些提示将使我通过尽可能少的实验来查明这个问题。在 SQL Studio 中摆弄查询对我没有多大帮助,因为我不能让它产生同样的错误。

这是查询:

TotalExVat 和 TotalVat 是 smallmoney 不为空。数据表中的“Total”字段映射到“System.Decimal”。我可以尝试将 smallmoney 转换为表达式中的钱,但是当它在 SQL 工作室中运行良好时,为什么我必须这样做呢?

我得到的异常是:异常类型:System.Data.SqlClient.SqlException 异常消息:将表达式转换为数据类型 smallmoney 的算术溢出错误。

更新

将 SUM(i.TotalExVat + i.TotalVat) 更改为 SUM(i.TotalExVat) + SUM(i.TotalVat) 消除了错误,但我仍然不明白为什么,因为生成的结果中没有 smallmoney 溢出。

更新 2

新问题。现在 smallmoney 铸造问题消失了,但现在我遇到了超时问题。如果在 SSMS 中运行,同一报告中使用的另一个查询将在大约 5-6 秒内运行。如果在表适配器中运行,它会在 10 分钟后超时。其他查询按预期运行,产生与 SSMS 中相同的结果。这支持了我的怀疑,即当我的表适配器尝试查询数据库时,某些事情正在发生。

更新 3

这开始变得奇怪了。smallmoney 问题查询是用于生成报告的一系列查询中的第五个填充查询。在我应用第一次更新中提到的修复后,我在第一个查询中遇到超时。当 smallmoney 在后面的查询中溢出时,该查询运行没有问题。这可能是什么原因?

查询在 smallmoney 查询给出并出错时运行,而在其工作时不运行:

如果我限制 smallmoney 查询给出结果 30.0 的日期间隔,则上述查询有效。如果我将日期间隔扩展到 smallmoney 查询也曾经失败的时间段,我会超时。当 smallmoney 查询失败时它运行良好时,如何在 smallmoney 查询之前运行的查询中获得超时?在 SSMS 中运行所有查询按预期工作。顺便说一句,查询同步运行。