【问题标题】:bulk update strongly typed dataset?批量更新强类型数据集?
【发布时间】:2011-07-10 16:45:55
【问题描述】:

是否可以在强类型数据集中进行批量更新?创建强类型数据集后,UpdateBatchSize 似乎不是一个选项。

【问题讨论】:

    标签: .net asp.net


    【解决方案1】:

    您是否尝试将此属性添加到 DataAdapter?使用 Property UpdateBatchSize 扩展自动生成的 Adapter 类,例如(尚未测试):

    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!)'
    

    【讨论】:

    • 我的适配器上似乎没有 UpdateBatchSize。这有什么诀窍吗?
    • @Carlos:是的,我已经使用属性 UpdateBatchSize 扩展了自动生成的 TableAdapter。我已经在上面描述了它是如何工作的。
    • @Tim:我不明白。您的代码不是简单地包装了一个名为 UpdateBatchSize 的成员吗?
    • @Carlos:我们讨论的是同一个问题,您是否尝试使用自动生成的 TableAdapters(来自 VS-Dataset Designer)在强类型数据集中设置 UpdateBatchSize?
    • 是的,完全正确。我没有看到内部适配器具有此属性,那么您如何设置它?
    猜你喜欢
    • 2013-02-16
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    相关资源
    最近更新 更多