在C#.net利用dataset缓存更新数据的问题

两个数据库中两个一样结构的表A和表B,读取一个数据库A中表A数据并存在缓存dataset中,利用SqlDataAdapter.Update更新另外一个数据库B的表B中,比较表A和表B数据,如果表B有的数据则进行更新,没有的数据则插入数据。

请问如何实现,本人试图用逐条比较方法,效率很慢。

是否有其他好的办法,请教各位大侠,如解决问题必定追加分重谢。

曾经看过这篇问答但不理解其中意思:http://topic.csdn.net/t/20050120/17/3741585.html
dataset没有做操作,只是从表A查询到数据存在dataset中,再更新表B;

表A有4万条数据,我采取分页查询进行更新到表B,SqlDataAdapter.Update能成功6000多条,但之后就没有成功导入全部完成。

第1个回答  2008-11-12
SqlCommandBuilder 是不能处理你的问题的,它要求你在需要操作的DataSet中对数据已经处理过.比如新增的行,RowState必须是 Added.(忘记了是不是这样叫的,反正就是有新增的,修改了的,已经删除的,和没有变更的这些状态.)
然后根据不同的RowState生成不同的操作语句,更新数据库.
如果你是想做数据备份,不如使用数据库的同步功能,就是那个[发布和订阅数据]
第2个回答  2008-11-17
下面的代码示例使用 AggregateCacheDependency 类将名为 XMLDataSet 的 DataSet 添加到依赖于文本文件和 XML 文件的缓存中。

' When the page is loaded, use the
' AggregateCacheDependency class to make
' a cached item dependent on two files.

Sub Page_Load(sender As Object, e As EventArgs)
Dim Source As DataView

Source = Cache("XMLDataSet")

If Source Is Nothing
Dim DS As New DataSet
Dim FS As FileStream
Dim Reader As StreamReader
Dim txtDep As CacheDependency
Dim xmlDep As CacheDependency
Dim aggDep As AggregateCacheDependency

FS = New FileStream(Server.MapPath("authors.xml"),FileMode.Open,FileAccess.Read)
Reader = New StreamReader(FS)
DS.ReadXml(Reader)
FS.Close()

Source = new DataView(ds.Tables(0))
' Create two CacheDependency objects, one to a
' text file and the other to an XML file.
' Create a CacheDependency array with these
' two objects as items in the array.
txtDep = New CacheDependency(Server.MapPath("Storage.txt"))
xmlDep = New CacheDependency(Server.MapPath("authors.xml"))
Dim DepArray() As CacheDependency = {txtDep, xmlDep}

' Create an AggregateCacheDependency object and
' use the Add method to add the array to it.
aggDep = New AggregateCacheDependency()
aggDep.Add(DepArray)

' Call the GetUniqueId method to generate
' an ID for each dependency in the array.
msg1.Text = aggDep.GetUniqueId()

' Add the new data set to the cache with
' dependencies on both files in the array.
Cache.Insert("XMLDataSet", Source, aggDep)
If aggDep.HasChanged = True Then
chngMsg.Text = "The dependency changed at: " & DateTime.Now

Else
chngMsg.Text = "The dependency changed last at: " & aggDep.UtcLastModified.ToString()
End If

cacheMsg1.Text = "Dataset created explicitly"
Else
cacheMsg1.Text = "Dataset retrieved from cache"
End If

MyLiteral.Text = Source.Table.TableName
MyDataGrid.DataSource = Source
MyDataGrid.DataBind()
End Sub

Public Sub btn_Click(sender As Object, e As EventArgs )

If (MyTextBox.Text = String.Empty) Then
msg2.Text ="You have not changed the text file."
Else
msg2.Text="You added " & MyTextBox.Text & "."

' Create an instance of the StreamWriter class
' to write text to a file.
Dim sw As StreamWriter
sw = File.CreateText(Server.MapPath("Storage.txt"))

' Add some text to the file.
sw.Write("You entered:")
sw.WriteLine(MyTextBox.Text)

' Write arbitrary objects to the file as needed.
sw.Write("Text added at:")
sw.WriteLine(DateTime.Now)
sw.WriteLine("-------------------")
sw.Close()
End If
End Sub
第3个回答  2008-11-13
数据字段很多的那种吗?
以前做过那种字段很少的,为了减少循环什么的判断 都是删除了之后,再重新加一遍。。。
逐条判断的,找到一样的跳出能提高点效率吧,再怎么整就不知道了

看了那个csdn的 是不是 dataAdapter.Update(dt);
是不是这个操作就能把你连接的dt 直接更新了

数据量这么大啊~ 循环得累死了。。是不是分页查询的事?全部查询 全部更新怎么样
相似回答