c# 强类型数据集,其表适配器未返回预期结果

Posted

技术标签:

【中文标题】c# 强类型数据集,其表适配器未返回预期结果【英文标题】:c# strongly typed dataset whose table adapter is not returning expected result 【发布时间】:2013-03-09 19:29:31 【问题描述】:

我有一个 C# 应用程序(使用 VS 2010 高级版)实现一个连接到 MS Access 2003 数据库的强类型数据集。我正在这个数据集中实现一个表适配器,其 SQL 脚本是:

SELECT [ID], [Name], [Created By]
FROM [Table Group]
WHERE [Created By] = ?
AND [ID] IN (SELECT [Group ID] FROM [Table Clustering] WHERE [Cluster ID] = ?)
ORDER BY [Name]

问题是它没有返回任何东西,但应该应该返回(我的数据库中有示例数据)。我已经尝试在 MS Access 中实现相同的脚本(用真实数据替换 ?s)并返回我期望的数据。

我通过在嵌入的 SELECT 语句中删除 "WHERE [Cluster ID] = ?" 进行了实验,它返回了数据,但这不是我需要的。

我还通过替换 ?在具有实际 [Cluster ID] 的嵌入式 SELECT 语句中并返回数据,但这又不是我需要的。

那么,表适配器中的 SQL 脚本有什么问题呢?它能够在 SELECT 中实现 SELECT 吗?此外,它是否能够实施?在 SELECT 中的 SELECT 中?怎么样?

谢谢! =)

正如预期的那样,IDE 会自动为我所做的表适配器生成一个方法(检索数据),因此我不需要在代码中手动创建 SQL 脚本......为每个人的信息(如果你是不熟悉),生成的方法需要两个参数(如预期的那样),一个用于 [Created By],一个用于 [Cluster ID] ... 从这里开始,请参考我在上面发布的问题。 :D

【问题讨论】:

您能否提供一个示例架构和一些数据来帮助重新创建此场景?另外,您使用什么代码来传递这些参数? 你能不能只做WHERE [Created By] = @CreatedBy 和做Parameters.AddWithValues(@parameter name, @parameter value);..? @DJKRAZE 认为代码可能是自动生成的。 OP 需要显示代码,否则我们都只是在这里在黑暗中拍照.. 只是强调一下,我正在使用强类型数据集,并且我正在使用数据集设计器来创建表适配器......我没有在我的代码中使用任何 SQL 脚本来使它看起来更干净和更有条理...如果我将 SQL 脚本放在我的代码中,我会这样做作为我的最后一个选择,我希望不是这样 【参考方案1】:

我认为这是一个 IDE 错误。具体来说,您有两个参数,因此 param1 和 param2 按此顺序排列。你会认为“?”占位符的顺序相同,但是当您执行查询并且 IDE 要求您填写值时,最后一个“?”是第一个参数(集群 ID),第一个参数(CreatedBy)是第二个参数。这张图告诉你我的意思:

在图像中,ID 是第一行,Event Count 是第二行,尽管 TableAdaptor 将它们作为 Event Count 在前,ID 在后。我没有尝试通过程序传递参数,但 IDE 以这种方式工作似乎是一个错误。

【讨论】:

以上是关于c# 强类型数据集,其表适配器未返回预期结果的主要内容,如果未能解决你的问题,请参考以下文章

强类型数据集无法填充,表映射问题? c#.net 2.0

通过 LINQ-to-SQl 加载数据集

如何在运行时使用 C# 创建强类型数据集?

从 C# 中的存储过程返回多个记录集

C#中如何把Oracle数据库查询的结果集返回

C#中使用Oracle存储过程返回结果集