我想解决我在制作应用程序时遇到的一个问题,该应用程序可以帮助使用C#WPF程序在Access数据库中显示和修改数据 .

我所拥有的 - 澄清它 - 它是我可以访问的数据库 . 数据库包含三个表和关系 . 还有一些查询,因为在过去它完全适用于VBA .

现在我收到了为此DB(数据库)做一个用户友好的应用程序的请求 .

我能做的是从主表加载数据让我说表“零件” . 此表包含一些部件数据,如ID,名称,组ID等 . 还有另一个名为Group的表 . 组包含3个组名 . 例如,它可能是软件,硬件,其他 .

如果我是用户并且知道SQL我会写:

SELECT ID, Parts.Name , Parts.Group , GroupName.Group from PARTS 
LEFT JOIN Group ON Parts.ID = Group.ID

这也是在Access DB文件中的QUERY中创建的 . 在点击此视图后,它会为您提供View - 仍然在Access DB文件中的VBA中 .

我在C#中所做的是我加载了DB包含的所有表 .

我有

ds.Tables["Parts"]
ds.Tables["Groups"]

分配时

DataView dv = new DataView;
dv = DataSet.Tables["Parts"].DefalutView; 
//PreviouslyCretedDatagridInWPF:
dataGrid.DataSource = dv;

如果加载应用程序,Grid的加载速度很快,我可以在一秒钟内加载窗口 - “parts”表中的数据 - 大约有10,000行和27列 .

但是,如果我尝试做一些使用简单的If条件加入例如那样......

ds.Tables["TempParts"] 也可以只是一个简单的克隆表,在位置上添加了一个字符串类型列,例如28 .

for(i=0;i<ds.Tables["Parts"].Rows.Count;i++) {     
    for( j=0;j<ds.tables["groups"].Rows.Count;j++){
    //0is ID column//10is groupIDcolumn)
    if(ds.Tables["TempParts"].Rows[i][10] == ds.Tables["groups"].Rows[j][0]) 
     { ds.Tables["TempParts"].Rows[i][28]= ds.Tables["groups"].Rows[j][0];}
}

所以我可以以某种方式分配或执行这样的连接 . 但我觉得这不是正确或最好的方法 . 因为我要求天气有一种方法可以更方便,甚至更快,因为这是真正耗时的操作 .

下一步当然是在新窗口中显示单击的行并进行一些编辑并使用接受更改进行应用,因此我在编辑窗口中也使用了条件,但我手动编写了这意味着如果用户选择“硬件”,则将编号1分配给groupID在Parts表中的列我觉得这也不是正确的方法,或者是它?

我指望一个案例,未来的表组也将是可编辑的,因此“组”和ID不能存储在某个静态数组或结构中 . 好吧,我必须处理数据表中的加载数据 .

所以我想要做的是在我的数据集之上执行连接,而如果我选择一些行并编辑,我还想检查ID属于哪个,例如像我提到的“软件”“硬件”等为用户显示的GroupID文本值,并将此id分配给主数据表并接受更改...

问题是什么是更快/更方便的方法 .

在上面(在)DB中执行,使用代码本身,使用一些可以更快地执行此类操作的库?

当然在代码中可能会有一些错误,因为我没有真正的代码,我试图尽可能地简化它 .

感谢您的时间 .