我有一个Access数据库(.mdb)文件,里面有六个表。这个文件大约300MB,所以不是巨大的,但足够大,我想要高效。在其中,有一个主表,一个客户表。其他表存储数据,如协商,一些额外的多对一到一个字段,等等。
我必须编写一个程序将此Access数据库转换为一组XML文件,每个客户端一个。这是一个数据库转换应用程序。
(我认为)
以List
的不可变对象的形式将整个Access数据库加载到内存中,然后使用Linq在这些列表中查找我需要的相关数据。
ThreadPool
个线程。因为所有对象都是不可变的,所以它们可以在线程之间自由共享,这意味着所有线程都可以随时访问所有数据,并且只需加载一次。使用Jet在数据库上运行查询以根据需要提取数据。
其他一些想法?
StackOverflows关于解决此问题的最佳方法的想法是什么?
答案 0 :(得分:1)
从SQL生成XML部件。在获取文件时将每个获取的记录存储在文件中。
样品:
SELECT '<NODE><Column1>' + Column1 + '</Column1><Column2>' + Column2 + '</Column2></Node>' from MyTable
答案 1 :(得分:1)
如果您的目标是将数据库转换为xml文件,则可以:
将每个记录集保存为XML文件:
myRecordset.save myXMLFile,adPersistXML
如果您使用的是Access文件,请使用currentProject.accessConnection作为ADO连接
答案 2 :(得分:0)
从这听起来,它将是一次性操作。我强烈反对将整个设置加载到内存中的实际过程,这似乎不是一种有效的方法。
另外,根据您的需要,您可以直接从Access中提取 - &gt; XML,如果这是你真正的最终游戏。
无论如何,对于一个小的数据库,一次只做一个,在我看来用一些专门编写的查询将更容易管理,写入更快,并且更不容易出错。
答案 3 :(得分:0)
我倾向于使用jet,因为你可以更具体地了解你想要提取的数据。
另外我注意到了大文件大小,这是我最近遇到的一个问题。这是访问95或97分贝?如果将DB转换为2000或2003然后再转换为97将减小此大小,在某些情况下似乎是一个错误。在我将其转换为2000并再次回到它是8兆的时,我正在处理的DB声称是70meg。