我想解决一个正在制作应用程序时遇到的问题,该应用程序可以使用C#WPF程序帮助显示和修改Access数据库中的数据。
我所拥有的-要澄清它-这是我可以访问的数据库。数据库包含三个表和关系。还有一些查询,因为过去它完全可以在VBA上运行。
现在,我收到了为此数据库(数据库)做一个用户友好的应用程序的请求。
我能做的是从主表加载数据,让我说表“ Parts”。该表包含一些零件数据,例如ID,名称,组ID等。 还有另一个表称为组。组包含3个组名。例如,它可以是软件,硬件,其他。
如果我是用户并且知道SQL,我会写:编辑:/编辑选择
SELECT ID, Parts.Name , Parts.Group , GroupName.Group from PARTS
LEFT JOIN Group ON Parts.GroupID = Group.ID
这也是在Access数据库文件的QUERY中创建的。 单击此视图后,它会根据您的需要提供视图-仍在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];}
}
所以我可以这样分配或执行联接。但是我觉得这不是正确的方法,也不是最好的方法。因为我要问天气,所以有一种方法可以使它更方便甚至更快,因为这实际上是耗时的操作。
当然,下一步是在新窗口中显示单击的行,并使用接受更改进行一些编辑和应用,因此我在编辑窗口中也使用了if条件,但我手动编写了它,这意味着如果用户选择“硬件”,则会为其分配编号1到部件表中的groupID列我觉得这也不是正确的方法,还是吗?
我认为将来的表组也是可编辑的,因此“组”和ID不能存储在某个静态数组或结构中。好吧,我必须处理数据表中加载的数据。
所以我想做的是在数据集上方执行连接,并且如果我选择一些行并进行编辑,我还要检查例如属于哪个ID。为用户显示的GroupID文本值,例如我提到的“软件”,“硬件”等,并将此ID分配给主数据表并接受更改...
问题是执行此操作的更快/便捷的方法。
在数据库的上方(是否),是否与代码本身一起使用,是否使用了可以更快地执行此类操作的库?
代码中当然会有一些错误,因为我在这里没有真正的代码,因此我尝试了尽可能地简化它。
谢谢您的时间。