2011-03-21 55 views
1

我有類似this one的問題,而是讀取(接受)答案沒有給我很大的啓示,所以我希望能夠更清楚地說明,並得到一個更清晰的迴應。使用的TableAdapter將行插入數據集沒有做任何事情

我試圖插入一個數據行插入表。我使用TableAdapter的自定義「插入非查詢」,我寫了(它工作,我測試)接受一些參數。我對通過.NET與數據庫進行通信的業務相當陌生,而且我正在做的可能是錯誤的設計。我的問題是爲什麼錯了什麼是做的正確方法?兩者同樣重要,IMO。

下面是一些示例VB代碼我寫道:

Dim arraysTableAdapter As New UnitTestsDataSetTableAdapters.ArraysTableAdapter 

Try 
    arraysTableAdapter.InsertArray("Test Array", 2, 1, 2, "Test user") 
Catch ex As SqlException 
    MsgBox("Error occured when trying to add new array." _ 
      & vbNewLine & vbNewLine _ 
      & ex.Message) 
End Try 

......這幾乎是它。沒有異常提出,我的表沒有得到一個新的行插入。一切都是我在調用InsertArray方法之前的方式。當我使用相同的參數在QueryBuilder中測試我的查詢時,會將新行添加到數據庫中。現在

,我也瞭解一些這是行不通的原因。我明白,我需要創建併爲了告訴TableAdapter什麼它添加數據來選擇我的DataSet(不知道該怎麼做)一行。或者至少我通過閱讀論壇的廣闊深淵而獲得了這種印象。

我真的很想在某些時候使用TableAdapter,因爲它知道.InsertArray存在,它知道它喜歡哪個參數。我可以嘗試並使用

Dim con As New SqlConnection 
    Dim cmd As New SqlCommand 

    con.ConnectionString = connString 
    con.Open() 

    cmd.CommandText = "INSERT ...... all that jazz" 

但它不夠乾淨,不夠乾淨,我喜歡我的代碼。那麼,有什麼辦法可以做我想做的事嗎?換句話說,如何使用TableAdapter的整潔結構與我的DataSet進行通信並在其中添加新行?

在此先感謝!

回答

3

有報道說,錯了兩件事情:

  1. (小問題)我沒有一個DataTableTableAdapter填寫(見下面的代碼)

  2. (主要的,偷偷摸摸的問題)我方法從一開始就工作。有什麼都沒有額外被添加除了上面的行。但是,ConnectionStringarraysTableAdapter正在將我的程序(默認情況下會自動)指向錯誤的位置。一旦我手動設置ConnectionString,它完美運行。

這裏是我的完整代碼:

Dim connString As String = "Some correct connection string" 
    Dim arraysDataTable As New SpeakerTestsDataSet.ArraysDataTable 

    Dim arraysTableAdapter As New UnitTestsDataSetTableAdapters.ArraysTableAdapter 

    'Set the correct connection string' 
    arraysTableAdapter.Connection.ConnectionString = conn 

    'Fill table from the adapter' 
    arraysTableAdapter.Fill(arraysDataTable) 

    Try 
     arraysTableAdapter.Insert("Test", 2, 1, 2, Now, Now, "Me") 
    Catch ex As Exception 
     MsgBox("Error occured when trying to add new array." _ 
       & vbNewLine & vbNewLine _ 
       & ex.Message) 
    End Try 
+1

你不知道你的#2描述如何幫助我!這是唯一的參考IN_THE_ENTIRE_INTERNET,這表明這可能是一個問題。我試圖通過檢查數據源來驗證我的插入是否正在工作,而不是在/ bin/Debug /文件夾中的數據庫! #hateVb – Wes 2013-10-05 21:56:48

+0

@Wes Awesome!很高興它幫助了某人。 – Phonon 2013-10-06 03:12:39

2

你鏈接的問題,接受的答案是正確的,但有時稱它在不同的詞幫助:

一個TableAdapter使用(DataSet中可以有一個或多個數據表)DataTable之間進行通信和一個數據庫。它可以從數據庫中提取數據並將其添加到DataTable中,並且可以將數據從DataTable發送到數據庫。它的目的是創建並執行使此通信正常工作所需的SQL代碼。

您正在嘗試使用TableAdapter的直接數據添加到您的數據表。這不起作用。相反,您應該使用DataTable附帶的方法將新行添加到DataTable,然後(如有必要)使用TableAdapter將該行發送到數據庫。

例如,一個數據集被稱爲包含一個名爲DataTable1數據表,它有三個文本列數據集1,你可以添加一條記錄是這樣的:

Dim d As New DataSet1 
    d.DataTable1.AddDataTable1Row("value1", "value2", "value3") 

這AddDataTable1Row方法將自動爲您創建的,而且我認爲是你在找什麼。

+0

這有一定道理;然而,正如你所看到的,我正在嘗試使用我自己的SQL nonQuery'.InsertArray',它負責將新行插入到表中。在這個過程中,它計算了某些東西,存儲時間戳,生成一個唯一的ID並執行更多的事情。這不像將數據插入容器那麼簡單。我試圖找出的是我是否可以使用相同的方法。我希望這是有道理的。 – Phonon 2011-03-21 20:52:39

+0

調用'.InsertArray'是否將數據添加到數據庫?如果是這樣,那麼您可以更改由'.InsertArray'調用的SQL以返回與您的DataTable的模式匹配的行。然後,您可以將ExecuteMode更改回Reader,並且它將同時填充您的數據庫和DataTable。 – 2011-03-21 21:06:14

+0

我解決了這個問題。這是完全不同的(設置,基本上)。我正在發佈我的解決方案。謝謝你的努力。 – Phonon 2011-03-21 21:24:50