2011-05-26 104 views
0

我一直在阅读一些hep论坛和一些帮助书籍,但似乎无法让我的头缠到此。我的任务是从两个文本文件中读取数据,然后将该数据加载到现有的MS Access 2007数据库中。所以这里是我想要做的:VB.NET更新访问数据库与数据表

  1. 从第一个文本文件和每一行数据读取数据使用CarID作为我的唯一字段将数据添加到DataTable。
  2. 从第二个文本文件读取数据,并在DataTable中查找现有CarID,如果存在更新该行。如果它不存在,请添加一个新行。
  3. 一旦完成将DataTable的内容推送到数据库。

我有什么至今:

Dim sSQL As String = "SELECT * FROM tblCars" 
    Dim da As New OleDb.OleDbDataAdapter(sSQL, conn) 
    Dim ds As New DataSet 
    da.Fill(ds, "CarData") 
    Dim cb As New OleDb.OleDbCommandBuilder(da) 

    'loop read a line of text and parse it out. gets dd, dc, and carId 

    'create a new empty row 
    Dim dsNewRow As DataRow = ds.Tables("CarData").NewRow() 

    'update the new row with fresh data 
    dsNewRow.Item("DriveDate") = dd 
    dsNewRow.Item("DCode") = dc 
    dsNewRow.Item("CarNum") = carID 
    'about 15 more fields 

    'add the filled row to the DataSet table 
    ds.Tables("CarData").Rows.Add(dsNewRow) 

    'end loop 

    'update the database with the new rows 
    da.Update(ds, "CarData") 

问题:

在构建我的表,我使用 “SELECT * FROM tblCars”,但如果该表具有数百万条记录已经什么。这不是浪费资源吗?如果我想更新新记录,我应该尝试一些不同的东西吗?

一旦我完成了第一个文本文件,然后我去我的下一个文本文件。这里最好的方法是什么:首先查找基于CarNum的现有记录或创建第二个表格,然后将两者合并到一起?

最后,当DataTable完成填充和im推到数据库我想确保如果记录已经存在三个主要字段(DriveDate,DCode和CarNum),他们得到更新与新字段,如果它不存在,那么这些记录会被追加。我的过程可能吗?

TIA AGP

+0

除非我遗漏了一些东西,否则我不会使用中间数据表,而是直接从文本文件数据中插入或更新MS-Access数据库。首先测试以确定密钥是否存在,并相应地插入或更新。 – 2013-07-10 23:31:00

回答

1

每加载文本文件到内存是性能更好的选择,也更容易代码。这当然完全取决于你有多少内存可用,以及你的文本文件有多大。

我的做法是先将所有数据从文件加载到DataTable中。然后将此表转换为XML。然后,您可以将XML传递到存储过程。该存储过程将把XML转换为表变量或临时表,您可以从中运行SQL查询。

从这里它是做一个“不存在”与你度过了在数据tblCars在SP查询,将是适用的简单情况。

在我看来,这是迄今为止进行的选择是最好的,没有必要为您的应用程序来拉任何数据了SQL的。 SQL针对这些类型进行了优化,并且将大大超出了应用程序的范围。

如果你想获得真正聪明的它,你可以阅读使用工作者线程每个文本文件,并作为他们已经读他们尽快加载到SQL。这将节省内存使用量并且速度非常快。

+0

感谢您的提示。阅读文本文件是非常小的,因为它只有100行我正在阅读的文本。我现在正在做的主要部分是用新记录更新数据库。为此,我认为DataAdapter/DataTable是最简单的方法,但我只是在黑暗中,为什么我必须首先提取所有数据。顺便说一句,这是一个MS Access数据库。 – sinDizzy 2011-05-27 14:45:02

+0

“加载到SQL”是什么意思?据我所知,SQL Server没有涉及到,所以我无法解析预期的含义。 – 2011-05-28 21:22:10

+0

我想别人会这么说的。我原来的问题是使用SQL命令将文本数据加载到MS Access中。 – sinDizzy 2011-06-02 20:16:14