none
DataSet的使用概念 RRS feed

  • 問題

  • 1.我由資料庫將記錄讀入DatsSet內。

    2.使用DataGridView呈現記錄。

    3.這時我可以在DataGridView內新增、更新、刪除記錄。

    請問:

    1.在DataGridView新增多筆新記錄後,DataAdapter是否能將DataGridView內新增的記錄,成批存入資料庫內?還是得使用Insert Into一筆一筆新增。

    2.同理,執行記錄更新與刪除之後,是否可以將DataGridView內的記錄成批覆寫回資料庫。

    敬請指導....謝謝。

    2007年6月14日 上午 09:49

解答

  • Hi,

    可以的,您可以利用SqlDataAdapter的Update方法將資料更新回資料庫中,有個部份要注意一下,如果您的Update、Delete等command是由VS幫你產生的話記得該資料表要有建立主索引才不會有問題。

    下面這邊有很棒的參考資源,可以看看

    MSDN 中文教學課程
    ADO.NET 開發高手線上教學課程

    http://www.microsoft.com/taiwan/msdn/elearning/adodotnet.htm

    2007年6月14日 上午 10:03
    版主

所有回覆

  • Hi,

    可以的,您可以利用SqlDataAdapter的Update方法將資料更新回資料庫中,有個部份要注意一下,如果您的Update、Delete等command是由VS幫你產生的話記得該資料表要有建立主索引才不會有問題。

    下面這邊有很棒的參考資源,可以看看

    MSDN 中文教學課程
    ADO.NET 開發高手線上教學課程

    http://www.microsoft.com/taiwan/msdn/elearning/adodotnet.htm

    2007年6月14日 上午 10:03
    版主
  • 謝謝。
    2007年6月14日 上午 10:23
  • 看過前輩指導的課程後,我已知道只要使用TableAdapter的UpDate方法就可以將資料覆寫回資料庫,但我寫了下列程式,怎麼試都無法覆寫回資料庫,且沒有引發錯誤。

     

           Try
                Me.原物料庫存TableAdapter.Update(Me.原物料庫存DataSet.原物料庫存)
                MsgBox("已更新記錄")
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try

     

    請問

    1.Update是更新DataSet內的值,還是將資料覆寫回資料庫,我感覺它只是更新DataSet內的值。

    2.是否我遺漏了哪個設定。

     

    敬請指導。

    2007年6月15日 上午 02:27
  • Hi,

    幾個部份可以確認看看,Update方法會傳回一個Integer,你可以確認一下,傳回來的應該是受影響的資料筆數;

    另外,之前相關討論也有提到,資料表記得要設定主索引、確認資料是否有寫入資料庫應該要檢查bin\debug\下面的資料庫檔案;可以確認看看。

    教學課程可以繼續看,還有很多相關的東西,多實作會比較清楚 ~

    2007年6月15日 上午 04:36
    版主
  • 謝謝。
    2007年6月15日 上午 05:44
  • 上述問題,我發覺一個無法排除的問題,狀況如下:

    1.我在表單中安排Database1DataSet、Table1BindingSource、Table1TableAdapter等控制項

    2.使用DataGridView呈現記錄,並進行記錄更新。

    3.在程式中使用下列程式碼將更新後的記錄寫回資料庫(sql Server)

        Me.Table1TableAdapter.Update(Me.Database1DataSet.Table1)
    4.這樣的安排按F5偵錯程式,一切都正常,可更新記錄與覆寫記錄。

    5.結束偵錯後,再次執行偵錯,結果原值出現,沒被更新

    6.我到專案資料夾的\bin\Debug資料夾內查看,結果發現資料庫被自動複製到這個資料夾內。

    7.我在bin\Debug資料夾內執行專案的exe檔案,發現資料庫的記錄已是更新後的記錄,這證明一點是,Update方法將覆寫的記錄,寫入bin\Debug資料夾的資料庫內,而不是覆寫到我繫結的資料庫內。難怪只要按F5偵錯程式,原記錄值就會出現。

     

    請問:

    1.照理講,Update方法覆寫記錄,是不是該覆寫回我所繫結的檔案才對?

    2.我該如何處理,才能在按F5偵錯程式時,看到Update方法覆寫記錄後的結果,也就是讓Update將記錄覆寫回我所繫結的資料庫,而不是寫入bin\Debug資料夾內的資料庫?

     

    敬請指導。謝謝。

     

    2007年6月16日 上午 04:36
  • :::試試看將複製到輸出目錄的屬性改為[有更新時才複製]
    2007年6月16日 下午 02:15
  • Hi,

    有一些部份要了解一下;當你在IDE裡面加入資料庫的時候IDE會一併幫你產生DataSet、資料配接器等等東西,這時候會擷取資料庫的結構等等資訊;但程式開始執行之後程式要怎麼知道你的資料庫在哪裡?這時候靠的是你的連線字串(如果需要密碼驗證的話,使用者名稱、密碼等也會在這個地方),你可以將appconfig檔案打開來看看,connectionstring的地方會看到你的連線字串,當中檔案位置的部份會用相對路徑來寫;試想一下如果是用絕對路徑的話,程式部署時如果使用者安裝目錄是裝在"D:"不是你指定的"C:",那程式不就不能用了 ~

    2007年6月16日 下午 03:21
    版主
  • 感謝兩位的指導,辛苦了。

    1.經我一翻查證,Help裡邊有提到,確實VB會將資料庫複製一份到bin資料夾內。

    2.上面"小琳"前輩所提改一下複製方式,我試過了,但「以更改才複製」的作法會引發其他傳輸管道錯誤。

    3.令人不解的是,使用Access資料庫,雖也會複製資料庫到bin資料夾,但按F5執行偵錯時,資料庫能正常運作,經修改後的記錄,於再次按F5時能正確產生因有的更新效果。但配合Sql 資料庫使用,每次按F5偵錯程式,資料庫的記錄始終保持原記錄值,不會接受插入、更新或刪除,不過bin裡面的資料庫確是保有新記錄值。

    4.這讓我困擾著無法按F5偵錯Sql資料庫的記錄變化。

     

    敬請諸位前輩不吝指點迷津。謝謝。

     

     

    2007年6月16日 下午 03:58
  • Hi,

    你的SQL資料庫是怎麼加到專案中的?連線字串是甚麼?程式碼部分是怎麼樣去做呢?

    貼出來會比較好討論一點 ~

    2007年6月17日 下午 03:25
    版主
  • 辛苦您了。依照Help的說明,我發生的狀態為正常狀態,因而最好的偵錯方法,是到bin\Debug資料夾內測試exe檔案的效果。

     

    感謝關心,再謝。

    2007年6月18日 上午 10:33