2016-07-16 19 views
0

用SQLite DataBase填充DataGridView數據我認爲簡單的方法是使用SQLiteDataAdapter填充表並使表格成爲DataGridView的DataSource,如下所示:使用SQLiteDataAdapter與SQLiteDataReader填充DataGridView的差異

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles cdmDataTable.Click 

    Dim conn = New SQLiteConnection("Data Source=MyDataBase.sqlite;Version=3") 

    Try 
     Using (conn) 
      conn.Open() 

      Dim sql = "SELECT * FROM users" 
      Dim cmdDataGrid As SQLiteCommand = New SQLiteCommand(sql, conn) 

      Dim da As New SQLiteDataAdapter 
      da.SelectCommand = cmdDataGrid 
      Dim dt As New DataTable 
      da.Fill(dt) 
      DataGridView1.DataSource = dt 

      Dim readerDataGrid As SQLiteDataReader = cmdDataGrid.ExecuteReader() 

     End Using 

    Catch ex As Exception 
     MsgBox(ex.ToString()) 
    End Try 

使用SQLiteDataReader而不是SQLiteDataAdapter有什麼優勢嗎?

+0

使用適配器更容易,但SQLiteDataAdapter內部使用SQLiteDataReader填充表。使用閱讀器並填充網格會減少一個循環。如果您沒有性能問題,請使用適配器。 (或者使用帶有ORM的用戶對象列表) – Steve

+0

@Steve實際上,使用簡單的SQL SELECT和no where子句,DA比DataReader更快。這看起來很奇怪,差別很小,但是一致(150k行約0.5秒)。 <5k行很難測量,所以不要擔心。 – Plutonix

+1

事實上,我不再直接使用DataAdapter或DataReader,這是很多時間。我真的更喜歡使用像Dapper這樣的Micro ORM。此外,我認爲最好將性能優化集中在減少檢索的行數和列數以及適當的索引上。 – Steve

回答

1

數據適配器是將DataTable連接到底層數據庫的高級組件。它可以填充DataTable,它可以將DataTable上的更改同步回數據庫。 DataAdapter在內部使用DataReader從表中讀取數據。

使用DataReader通過DataAdapter填充DataTable沒有明顯的優勢。

+0

明確的答案,非常感謝。問題解決了 – fedeteka