C#强类型数据集的表适配器未返回预期结果

4

我有一个使用VS 2010高级版编写的C#应用程序,实现了与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] =?”来进行实验,它返回了数据,但这不是我需要的。
我还通过将嵌入式SELECT语句中的?替换为实际的[Cluster ID]进行了另一个实验,它返回了数据,但这仍然不是我需要的。
那么表适配器中的SQL脚本问题出在哪里?它能够实现SELECT中的SELECT吗?此外,它能够在SELECT中实现?如何实现?
谢谢!=)
如预期的那样,IDE自动为我创建了一个方法(用于检索数据),因此我不需要手动在代码中创建SQL脚本...对于每个人的信息(如果您不熟悉),生成的方法要求两个参数(如预期),一个用于[Created By],一个用于[Cluster ID]...从这里开始,请参考我上面发布的问题。:D

你能提供一个样本模式和一些数据来帮助重新创建这种情况吗?此外,您使用什么代码来传递这些参数? - PinnyM
你能不能只是做 WHERE [Created By] = @CreatedBy 并且使用 Parameters.AddWithValues(@parameter name, @parameter value);..? - MethodMan
1
OP需要展示代码,否则我们都只是在胡乱猜测。 - MethodMan
只是强调一下,我正在使用强类型数据集,并且我正在使用数据集设计器创建表适配器...我没有在我的代码中使用任何SQL脚本,以使其看起来更清洁和有组织...如果我将在我的代码中放置SQL脚本,我会把它作为最后的选择,希望不是这种情况。 - ewak
@Remou FillByAssigned方法(如上截图中所示的红色圈出部分)是由数据集设计器自动生成的,它会处理参数排序,因此我只需向这两个参数提供数据,但正如我上面所述,数据没有被返回,这不应该是这种情况 :( - ewak
显示剩余3条评论
1个回答

0

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

VS2012

在这张图片中,ID 是第一行,事件计数是第二行,尽管 TableAdaptor 将它们作为事件计数第一和 ID 第二。我没有尝试通过程序传递参数,但看起来 IDE 工作方式存在问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接