2011-05-26 43 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