C#过滤读取了多个具有多个关系的表

时间:2013-09-04 19:57:14

标签: c# mysql datatable dataset dataadapter

我有一个非常大的数据库,包含几个表和复杂的关系以及数千条记录。为了简化问题,我说我有一个MySQL数据库如下:

[表1]

  • ID
  • table2_id
  • table3_id
  • 名_ID

[表2]

  • ID
  • 名_ID

[表3]

  • ID
  • 名_ID

[名称]

  • ID
  • 文本

然后有关系:

  • table1.name_id - > name.id
  • table1.table2_id - > table2.id
  • table1.table3_id - > table3.id
  • table2.name_id - > name.id
  • table3.name_id - > name.id

表包含:

  • table1中的50,000条记录
  • 表2中的10,000条记录
  • 表3中的5,000条记录
  • 名义上的25,000条记录

我需要在显示列文本名称的DataGridView中显示table1。

我需要一个过滤器应用于每个table1请求,其中我可以为每个表包含一个名称搜索关键字:table1,table2,table3。

我一直在尝试使用DataAdapters手动填充DataSet并添加DataRelations并发现了一些问题:

  • 使DataSet填满所有数据需要很长时间和大量内存。显然我不需要一次性完成任务,如果我可以将table1限制为5,000条记录,并且应用了过滤器,我会很高兴
  • 考虑DataAdapters和DataSet,我无法设置WHERE条件为子行以检索过滤的table1数据 - 例如:我想得到table1的列表,其中table2 name text =“a”和table3 text = “b” 的

我真的不想像我之前提到的那样构建'SELECT ... LEFT JOIN'或'SELECT .... table1,table2,table3'查询,我处理超过6个具有嵌套关系的表(例如一个相关的表与另一个表有关。)

我不想检索所有table1记录,然后像我之前说的那样在C#端过滤它们 - 这需要很长时间,而且不需要在屏幕上显示所有记录。所有记录必须仅考虑过滤记录,然后结果可以限制为5,000项。

我理解在这种情况下使用DataSet和DataAdapter可能是错误的。任何其他想法都非常受欢迎,我相信也会有所帮助。谢谢。

有人可以指出我正确的方向吗?

0 个答案:

没有答案