2011-03-07 12 views

答えて

3

このプロパティをDataAdapterに追加しようとしましたか?例えば、プロパティUpdateBatchSizeで自動生成されたアダプタクラスを拡張( まだ テストされていません):

Namespace DataSet1TableAdapters 
    Partial Public Class AddressTableAdapter 
     Public Property UpdateBatchSize() As Integer 
      Get 
       Return Me.Adapter.UpdateBatchSize 
      End Get 
      Set(ByVal value As Integer) 
       Me.Adapter.UpdateBatchSize = value 
       If value <> 1 Then 
        Me.Adapter.UpdateCommand.UpdatedRowSource = UpdateRowSource.None 
        Me.Adapter.InsertCommand.UpdatedRowSource = UpdateRowSource.None 
        Me.Adapter.DeleteCommand.UpdatedRowSource = UpdateRowSource.None 
       Else 
        Me.Adapter.UpdateCommand.UpdatedRowSource = UpdateRowSource.FirstReturnedRecord 
        Me.Adapter.InsertCommand.UpdatedRowSource = UpdateRowSource.FirstReturnedRecord 
        Me.Adapter.DeleteCommand.UpdatedRowSource = UpdateRowSource.FirstReturnedRecord 
       End If 
      End Set 
     End Property 
    End Class 
End Namespace 

は、あなたが拡張したい名前空間の名前と部分アダプタクラスのための自動生成designer.cs/vbに見てください一括更新機能を使用して、データセットと同じ名前のファイルに入れますが、designerは含まれません。あなたが私に従うことができない場合は、見てくださいhere

C#

namespace DataSet1TableAdapters 
{ 
    public partial class AddressTableAdapter 
    { 
     public int UpdateBatchSize { 
      get { return this.Adapter.UpdateBatchSize; } 
      set { 
       this.Adapter.UpdateBatchSize = value; 
       if (value != 1) { 
        this.Adapter.UpdateCommand.UpdatedRowSource = UpdateRowSource.None; 
        this.Adapter.InsertCommand.UpdatedRowSource = UpdateRowSource.None; 
        this.Adapter.DeleteCommand.UpdatedRowSource = UpdateRowSource.None; 
       } else { 
        this.Adapter.UpdateCommand.UpdatedRowSource = UpdateRowSource.FirstReturnedRecord; 
        this.Adapter.InsertCommand.UpdatedRowSource = UpdateRowSource.FirstReturnedRecord; 
        this.Adapter.DeleteCommand.UpdatedRowSource = UpdateRowSource.FirstReturnedRecord; 
       } 
      } 
     } 
    } 
} 

ことが を動作する場合、あなたが直接、自動生成されたファイルを変更することはできませんので、それが変更に自動的に再生成されますので、それだけで、私が説明したように動作します。

thisを読んだ後、私は上記のコードを変更してUpdatedRowSourceプロパティを適切に設定しました。次のコードでテスト

Dim stopWatch As New Stopwatch 
Dim da As New DataSet1TableAdapters.AddressTableAdapter 
Dim tblAllAdresses As New DataSet1.AddressDataTable 
Dim tsBS1, tsBS0 As TimeSpan 

da.Fill(tblAllAdresses) 

da.UpdateBatchSize = 1 
For Each adrr As DataSet1.AddressRow In tblAllAdresses 
    adrr.ModifiedDate = Date.Now 
Next 
stopWatch.Start() 
Dim addressesChanged As Int32 = da.Update(tblAllAdresses) 
stopWatch.Stop() 
tsBS1 = stopWatch.Elapsed 

da.UpdateBatchSize = 0 '0 means maximum server can handle' 
For Each adrr As DataSet1.AddressRow In tblAllAdresses 
    adrr.ModifiedDate = Date.Now 
Next 
stopWatch.Restart() 
addressesChanged = da.Update(tblAllAdresses) 
stopWatch.Stop() 
tsBS0 = stopWatch.Elapsed 

Console.WriteLine("tsBS1: " & tsBS1.Minutes & ":" & tsBS1.Seconds & ":" & tsBS1.Milliseconds) '12 seconds' 
Console.WriteLine("tsBS0: " & tsBS0.Minutes & ":" & tsBS0.Seconds & ":" & tsBS0.Milliseconds) '9 seconds(on localhost!)' 
+0

私は私のアダプタでUpdateBatchSizeを持っていないようです。これにトリックはありますか? – Carlos

+0

@Carlos:はい、UpdateBatchSizeプロパティを持つ自動生成TableAdapterを拡張しました。私はそれがどのように機能するかを上記で説明しました。 –

+0

@ティム:わかりません。あなたのコードは単にUpdateBatchSizeというメンバをラップしませんか? – Carlos

関連する問題