.net 批量更新强类型数据集?

.net 批量更新强类型数据集?,.net,asp.net,.net,Asp.net,是否可以在强类型数据集中执行批处理更新?创建强类型数据集后,UpdateBatchSize似乎不是一个选项。是否尝试将此属性添加到DataAdapter?使用UpdateBatchSize属性扩展自动生成的适配器类,例如(尚未测试): 如果可以的话,它只能按照我描述的方式工作,因为您不能直接更改自动生成的文件,因为它将在更改时自动重新生成 编辑:阅读后,我更改了上面的代码,以相应地设置UpdatedRowSource属性 使用以下代码进行测试: Dim stopWatch As New Stop

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

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

如果可以的话,它只能按照我描述的方式工作,因为您不能直接更改自动生成的文件,因为它将在更改时自动重新生成

编辑:阅读后,我更改了上面的代码,以相应地设置
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:我们讨论的是同一个问题吗?你是否试图用自动生成的TableAdapter(从VS数据集设计器)在强类型数据集中设置UpdateBatchSize?是的,没错。我看不到内部适配器具有此属性,因此如何设置它?
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;
                }
            }
        }
    }
}
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!)'