【问题标题】:DataTable.Load Method not working when there´s update only with new records仅使用新记录进行更新时,DataTable.Load 方法不起作用
【发布时间】:2015-09-13 08:55:05
【问题描述】:

我有一个 SQL 表,需要使用另一个表中的数据进行更新。

如果有新记录,它会工作并插入新记录,但如果现有记录有更新,它不会更新记录中的名称。

例子在VB.Net中,但欢迎你用C#代码回复。

        Dim workMembers As DataTable = New DataTable()
        Dim extMembers As New DataTableReader(GetExternalMembers())

        Using con As New SqlConnection(c.ConnectionString)
            Using sda As New SqlDataAdapter("Select id, name from members", con)
                sda.Fill(workMembers)
                workMembers.Load(extMembers, LoadOption.PreserveChanges)
                sda.Update(workMembers)
            End Using
        End Using

【问题讨论】:

  • 如果我没记错的话,dataadapter 填充不会填充主键信息并且没有匹配的主键,Load 只会追加记录。尝试在sda.Fill(workMembers) 之前添加sda.FillSchema(workMembers, SchemaType.Source)

标签: c# sql vb.net datatable


【解决方案1】:

workMembers.Load 从外部表加载记录并将它们标记为未更改,因为表中已经存在一条记录。请参阅DataTable.Load Method,备注下的第二段。您需要遍历记录并使用 SetModified 方法将每个修改的记录设置为 Modified。 TnTinMn 是正确的,您的表定义需要在定义中附加一个主键才能支持合并。见DataTable.PrimaryKey Property

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    相关资源
    最近更新 更多