2014-12-21 62 views
0

我有一個數據庫連接到我的VB.NET項目和我的程序的一部分操作是我添加一行。爲了提高效率,我試圖減少從數據庫中提取的數據。目前,我不得不拿走整個表格(我寧願不要這樣做),爲了能夠添加行,我想盡可能少的數據。這裏是我當前的代碼:將數據行添加到數據庫而沒有DataSet中的完整表?

MessagesDataSet.Clear() 
MessagesTableAdapter.SelectCommand = New OleDb.OleDbCommand("SELECT * FROM Messages", MessagesTableAdapter.SelectCommand.Connection) 
MessagesTableAdapter.Fill(MessagesDataSet) 
Dim row As DataRow = MessagesDataSet.Tables(0).NewRow() 
row.Item(0) = MessagesDataSet.Tables(0).Rows.Count + 1 
row.Item(1) = uuid 
row.Item(2) = Now 
row.Item(3) = message 
row.Item(4) = "<ROOM>" 
row.Item(5) = currentRoomName 
MessagesDataSet.Tables(0).Rows.Add(row) 
MessagesTableAdapter.Update(MessagesDataSet) 

如果我嘗試別的我得到一個異常(通常是該行已經屬於表,在第二屆最後一行),這是一個Access(2007-2013)數據庫與第一列(row.Item(0))作爲主鍵。

任何幫助,將不勝感激!我試圖改變SELECT語句只拉下主鍵,但當我這樣做時,我得到一個IndexOutOfRangeException(無法找到列1)在語句row.Item(1)= uuid。

+0

嗯,你做的最後一排選擇*這就是爲什麼。什麼是你的條件,只需要撤回你需要的東西?我看到你實際使用這個回來的唯一東西就是行數。 – Codexer

+1

你應該不需要任何數據庫中的任何信息來添加一個新行。 – Plutonix

+0

@Plutonix說了些什麼,並考慮在索引中使用身份(或自動增量或在Access中調用的任何內容)字段。如果兩個用戶同時更新同一個表,則顯示的代碼會崩潰 - 在競爭條件下,他們可能會讀取相同的rows.count,並嘗試插入具有相同索引值的新行。 (我假設你的第一個字段是主鍵) – peterG

回答

0

變化MessagesDataSet.Tables(0).Rows.Count + 1 MessagesDataSet.Tables(0).Rows.Count - 1

它會給你,你最近添加

相關問題