(華版)

一般我们都是直接用回同一个DataSet来更新数据库里的资料,但有没有想过这样是很没有效率的做法!因为SqlDataAdapter要扫描整个DataSet里的数据的RowState;只有以下三个State的数据才传送回去数据库:
   DataRowState.Added
   DataRowState.Deleted
   DataRowState.Modified

  如何用DataSet.GetChanges来提升数据库资料更新效率。

所以就要用DataSet.GetChanges方法来读取所指定(Added,Deleted或Modified)的数据,然后存到另一个新的DataSet(比如说:dsChanges)。这一来,当执行SqlDataAdapter.Update方法时就不再需要扫描那么多的数据了(比如说:Unchanged的DataRow)。

如何用DataSet.GetChanges来提升数据库资料更新效率。    '声明变量
如何用DataSet.GetChanges来提升数据库资料更新效率。
    Private ds As DataSet
如何用DataSet.GetChanges来提升数据库资料更新效率。    
Private dsChanges As DataSet
如何用DataSet.GetChanges来提升数据库资料更新效率。
如何用DataSet.GetChanges来提升数据库资料更新效率。
如何用DataSet.GetChanges来提升数据库资料更新效率。    
'(前)
如何用DataSet.GetChanges来提升数据库资料更新效率。
    '刷新数据库里的资料
如何用DataSet.GetChanges来提升数据库资料更新效率。
    da.Update(ds)
如何用DataSet.GetChanges来提升数据库资料更新效率。
如何用DataSet.GetChanges来提升数据库资料更新效率。
如何用DataSet.GetChanges来提升数据库资料更新效率。    
'(后)
如何用DataSet.GetChanges来提升数据库资料更新效率。
    '实列化DataSet Class
如何用DataSet.GetChanges来提升数据库资料更新效率。
    dsChanges = New DataSet
如何用DataSet.GetChanges来提升数据库资料更新效率。    
'读取所有更改,新添加,删除的数据
如何用DataSet.GetChanges来提升数据库资料更新效率。
    dsChanges = ds.GetChanges(DataRowState.Added Or DataRowState.Deleted Or DataRowState.Modified)
如何用DataSet.GetChanges来提升数据库资料更新效率。    
'刷新数据库里的资料
如何用DataSet.GetChanges来提升数据库资料更新效率。
    da.Update(dsChanges)


而且每一个DataRow都会保存两份数据;一份是原本的数据(在还没有更改时)和更改后的数据(RowState = DataRowState.Modified)。这也是SqlDataAdapter用来面对数据conflict时的重点数据。因为DataSet是保存在用户端的数据(就是ADO.NET的设计重点"Disconnected Environment");所以存在数据库里的数据随时都可以被另一个程序更改而没有反映在别的用户端里的DataSet。

如果没有了Original的数据,那SqlDataAdapter里的UpdateCommand的CommandText就如以下:

  UPDATE Customers SET ContactName = @ContactName WHERE CustomerID = @CustomerID

但是如果有了Original的数据后;整个CommandText就会复杂多了(尤其是那些读取整个table的数据那种!)和更加保险:

   UPDATE Customers SET ContactName = @ContactName WHERE CustomerID = @CustomerID AND ContactName = @OrigContactName

而@ContactName就是读取自DataRow.Item("ContactName", DataRowVersion.Current)和@OrigContactName就读取自DataRow.Item("ContactName", DataRowVersion.Original)。当然SqlDataAdapter.UpdateCommand里的CommandText就会复杂多一些了。。。


如何用DataSet.GetChanges来提升数据库资料更新效率。            '实列化SqlDataAdapter控件里的UpdateCommand Class
如何用DataSet.GetChanges来提升数据库资料更新效率。
            prm(2= New SqlParameter
如何用DataSet.GetChanges来提升数据库资料更新效率。            
With prm(2)
如何用DataSet.GetChanges来提升数据库资料更新效率。                .ParameterName 
= "@ContactName"
如何用DataSet.GetChanges来提升数据库资料更新效率。
                .Direction = ParameterDirection.Input
如何用DataSet.GetChanges来提升数据库资料更新效率。                .SqlDbType 
= SqlDbType.NVarChar
如何用DataSet.GetChanges来提升数据库资料更新效率。                .Size 
= 40
如何用DataSet.GetChanges来提升数据库资料更新效率。                .SourceColumn 
= "ContactName"
如何用DataSet.GetChanges来提升数据库资料更新效率。
                .SourceVersion = DataRowVersion.Current
如何用DataSet.GetChanges来提升数据库资料更新效率。            
End With
如何用DataSet.GetChanges来提升数据库资料更新效率。
如何用DataSet.GetChanges来提升数据库资料更新效率。            prm(
3= New SqlParameter
如何用DataSet.GetChanges来提升数据库资料更新效率。            
With prm(3)
如何用DataSet.GetChanges来提升数据库资料更新效率。                .ParameterName 
= "@OrigContactName"
如何用DataSet.GetChanges来提升数据库资料更新效率。
                .Direction = ParameterDirection.Input
如何用DataSet.GetChanges来提升数据库资料更新效率。                .SqlDbType 
= SqlDbType.NVarChar
如何用DataSet.GetChanges来提升数据库资料更新效率。                .Size 
= 40
如何用DataSet.GetChanges来提升数据库资料更新效率。                .SourceColumn 
= "ContactName"
如何用DataSet.GetChanges来提升数据库资料更新效率。
                .SourceVersion = DataRowVersion.Original
如何用DataSet.GetChanges来提升数据库资料更新效率。            
End With
如何用DataSet.GetChanges来提升数据库资料更新效率。
如何用DataSet.GetChanges来提升数据库资料更新效率。            prm(
4= New SqlParameter
如何用DataSet.GetChanges来提升数据库资料更新效率。            
With prm(4)
如何用DataSet.GetChanges来提升数据库资料更新效率。                .ParameterName 
= "@CustomerID"
如何用DataSet.GetChanges来提升数据库资料更新效率。
                .Direction = ParameterDirection.Input
如何用DataSet.GetChanges来提升数据库资料更新效率。                .SqlDbType 
= SqlDbType.NChar
如何用DataSet.GetChanges来提升数据库资料更新效率。                .Size 
= 5
如何用DataSet.GetChanges来提升数据库资料更新效率。                .SourceColumn 
= "CustomerID"
如何用DataSet.GetChanges来提升数据库资料更新效率。
                .SourceVersion = DataRowVersion.Original
如何用DataSet.GetChanges来提升数据库资料更新效率。            
End With
如何用DataSet.GetChanges来提升数据库资料更新效率。
如何用DataSet.GetChanges来提升数据库资料更新效率。            
'实列化SqlCommand Class
如何用DataSet.GetChanges来提升数据库资料更新效率。
            cmd(1= New SqlCommand
如何用DataSet.GetChanges来提升数据库资料更新效率。            
'设定SqlCommand对象的属性
如何用DataSet.GetChanges来提升数据库资料更新效率。
            With cmd(1)
如何用DataSet.GetChanges来提升数据库资料更新效率。                .Connection 
= cn
如何用DataSet.GetChanges来提升数据库资料更新效率。                .CommandTimeout 
= 10
如何用DataSet.GetChanges来提升数据库资料更新效率。                .CommandText 
= "UPDATE Customers SET ContactName = @ContactName WHERE CustomerID = @CustomerID AND ContactName = @OrigContactName"
如何用DataSet.GetChanges来提升数据库资料更新效率。
                .CommandType = CommandType.Text
如何用DataSet.GetChanges来提升数据库资料更新效率。                .Parameters.Add(prm(
2))
如何用DataSet.GetChanges来提升数据库资料更新效率。                .Parameters.Add(prm(
3))
如何用DataSet.GetChanges来提升数据库资料更新效率。                .Parameters.Add(prm(
4))
如何用DataSet.GetChanges来提升数据库资料更新效率。            
End With
如何用DataSet.GetChanges来提升数据库资料更新效率。
如何用DataSet.GetChanges来提升数据库资料更新效率。            
'实列化SqlDataAdapter Class
如何用DataSet.GetChanges来提升数据库资料更新效率。
            da = New SqlDataAdapter
如何用DataSet.GetChanges来提升数据库资料更新效率。            da.UpdateCommand 
= cmd(1)

點撃下載代碼

相关文章:

  • 2021-11-12
  • 2022-12-23
  • 2021-12-10
  • 2022-03-08
  • 2022-01-23
  • 2022-12-23
  • 2021-08-06
猜你喜欢
  • 2021-08-20
  • 2022-12-23
  • 2021-12-22
  • 2021-08-25
  • 2021-05-17
相关资源
相似解决方案