2012-08-01 99 views
0

我想用SQL select語句的結果填充數據表,但使用事務。我使用事務的原因是因爲我有一個名稱列表(作爲數據表),我想遍歷名稱列表並選擇名稱=列表中的名稱的數據庫行。數據庫中有500,000個名字,我只想要檢索相關的行。我有這個程序的代碼,因爲我認爲它應該看起來像(未測試),但我不知道如何將數據放入數據表....所以我錯過了我聲明數據表的地方和該表的'填充' ,有人可以幫忙嗎?或者建議我怎樣才能從batabase中獲取信息,而無需單獨查看每個名稱。使用SQL'選擇'在數據表中填充數據表

Using connection As New SQLite.SQLiteConnection(R2WconectionString) 
      connection.Open() 
      Dim sqliteTran As SQLite.SQLiteTransaction = connection.BeginTransaction() 
      Try 
       oMainQueryR = "SELECT NameID, Address, Ocupation FROM Employees Where Name= :Name" 
       Dim cmdSQLite As SQLite.SQLiteCommand = connection.CreateCommand() 
       With cmdSQLite 
        .CommandType = CommandType.Text 
        .CommandText = oMainQueryR 
        .Parameters.Add(":Name", SqlDbType.VarChar) 
       End With 
       'Prevent duplicate selects by using a dictionary 
       Dim NameInalready As New Dictionary(Of String, String) 

       For Each row As DataRow In TheLIST.Rows 
        If NameInalready.ContainsKey(row.Item("Name")) Then 
        Else 
         NameInalready.Add(row.Item("Name"), "") 
         cmdSQLite.Parameters(":Name").Value = row.Item("Name") 
         cmdSQLite.ExecuteNonQuery() 
        End If 

       Next 

       sqliteTran.Commit() 

      Catch ex As Exception 
      End Try 
     End Using 

回答

1

首先,您不需要事務,因爲您沒有更新數據庫。其次,根據TheLIST中名稱的可能數量,可能需要將名稱選擇器更改爲IN(即SELECT * FROM Employees WHERE Name IN ('name1', 'name2')。但是,如果您期望超過大約10個,這可能不會造成麻煩。

最後,你需要創建一個新的DataTable來保存結果,然後你需要創建一個DataAdapter通過cmdSqlLite作爲構造函數的參數。最後,用DataAdapter.Fill方法(數據表)更換您的ExecuteNonQuery。

例如(在Dim cmdSQLite之後):

Dim oDataTable As New DataTable("Employees") 
Dim oAdapter As New SqliteDataAdapter(cmdSQLite) 

,並更換ExecuteNonQuery行:

oAdapter.Fill(oDataTable) 

我會說,它可能需要一些調整,符合本規範。我只使用類對象和集合,所以我的偏好實際上是加載一組Employee類實例。

我會這樣做,將ExecuteNonQuery替換爲ExecuteReader,然後將讀取的數據加載到新的類實例中。這種類型的方法解決了跨服務邊界序列化數據的各種問題(例如,用於Web服務的Xml),並且還允許您在需要時將業務邏輯嵌入到類中。

+0

列表中可能有大約500個名字,我應該說我的appology,我也認爲Transactions也是加快多個數據庫查詢的好方法。這是我第三天交易,所以我在這方面相當綠色。 – user1500403 2012-08-01 01:27:50

+0

謝謝你,這些添加使整個代碼完美工作! – user1500403 2012-08-01 01:58:33

+0

我想問一下如何實現閱讀器解決方案?儘管上述情況在極端情況下可用,但數據表太大而無法存儲在內存中,因此讀者可能是一個很好的解決方案,但是如何在循環名稱的同時實現讀者的讀寫? – user1500403 2012-08-31 00:57:04

相關問題