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

时间:2013-03-20 15:36:15

标签: c# sql ms-access dataset tableadapter

我有一个C#应用程序(使用VS 2010 premium)实现连接到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中实现相同的脚本(用真实数据替换?)并返回我期望的数据。

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

我还做了另一个实验,取代了?在带有实际[Cluster ID]的嵌入式SELECT语句中,它返回了数据,但这又不是我需要的。

那么表适配器中的SQL脚本有什么问题?它能够在SELECT中实现SELECT吗?而且,它能够实现一个?在SELECT中的SELECT?如何?

谢谢你! =)

The strongly-typed dataset I was taking about

The SQL builder I am using to create the table adapter

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

1 个答案:

答案 0 :(得分:0)

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

VS2012

在图像中,ID是第一行,而事件计数是第二行,即使TableAdaptor将它们作为事件计数优先和ID秒。我没有尝试通过程序传递params,但似乎IDE会以这种方式工作。