none
請問這裏有兩個Update資料方法有什麼不同? RRS feed

  • 問題

  • Update Method as follows :
    這裡的CRTA是ABCTableAdapters。
    方法一:
         Dim CRDT As New DBDataSet.ABCDataTable
         Dim CRDR As DBDataSet.ABCRow
         CRTA.FillByKey(CRDT, CRKey)
         CRDR = CRDT.Item(0)
         CRDR.Field1 = Field1Str
         CRDR.Field2 = Field2Str
         CRDR.EndEdit()
         CRTA.Update(CRDR)

    方法二:
         Dim CRDT As New DBDataSet.ABCDataTable
         Dim CRDR As DBDataSet.ABCRow
         CRTA.Fill(CRDT)
         CRDR = CRDT.FindByCRKey(CRKey)
         CRDR.Field1 = Field1Str
         CRDR.Field2 = Field2Str
         CRDR.EndEdit()
         CRTA.Update(CRDR)

    當我的資料庫有一萬個Records時,第二個方法會比第一個方法慢。
    如果我有個Batch去Update資料時,就會發現,方法一可以1秒Update四至五個Record,但用方法二就要1秒一個Record.
    為什麼會這樣呢?

    2010年3月10日 上午 02:19

解答

  • TableAdapters的Query是針對資料庫中的記錄做操作, 是向資料庫伺服器要資料, DataTable的FindByKey是對DataTable中的記錄做操作, 是在程式中執行搜尋.
    • 已標示為解答 Lolota Lee 2010年3月17日 上午 06:29
    2010年3月11日 上午 11:46

所有回覆

  • HI,

    要做Batch Update可以利用SqlBulkCopy類別, 以得到最好的效率.
    2010年3月10日 上午 02:28
  • Hi,


    如果您用的是SQL Server, 您可以用執行計畫看看FillByKey & Fill語法上的差距,然後再去調整Index。




    Regards,
    Lolota


    微軟技術支援中心 CSS - http://www.dotblogs.com.tw/lolota
    2010年3月10日 上午 02:34
  • 方法一在一開始就將範圍縮小了, 方法二等於先把全部資料fill進DataTable, 然後再做尋找key的動作, 速度上會慢一點是應該會成立的.

    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    2010年3月10日 上午 03:06
    版主
  • 我個Database係MDB,不是SQL Server。
    2010年3月10日 上午 03:09
  • 我想知道,當我用DataTable的FindByKey,同用TableAdapters的Query係唔係唔同的。
    係唔係用Query就快啲呢?
    2010年3月10日 上午 03:13
  • TableAdapters的Query是針對資料庫中的記錄做操作, 是向資料庫伺服器要資料, DataTable的FindByKey是對DataTable中的記錄做操作, 是在程式中執行搜尋.
    • 已標示為解答 Lolota Lee 2010年3月17日 上午 06:29
    2010年3月11日 上午 11:46