检查XML文件中的PK是否与数据库中的PK类似

时间:2013-08-30 07:58:31

标签: c# .net sql xml database

使用C#.Net

我制作了一个程序,将SQL服务器数据库中的表导出为XML文件。 然后我将对XML文件进行更改并将其导回到DB。

我目前正在处理的新程序应检查我的XML文件并将其与数据库上的同一个表进行比较。如果XML文件上的主键与DB上的相同,则它将删除XML文件中的行,其他具有不同PK的行将被导入。

我正在使用SqlBulkCopy将表从XML导入到数据库。 问题是我不知道如何从XML获取主键并将其与DB上的主键进行比较。

示例XML结构:

<NewDataSet> 
    <Table>
      <DeviceId>1</DeviceId>
      <DeviceTypeId>1</DeviceTypeId>
      <Disabled>false</Disabled>
    </Table>
</NewDataSet>

1 个答案:

答案 0 :(得分:0)

假设XML结构为:

<NewDataSet> 
   <Table>
     <DeviceId>1</DeviceId>
     <DeviceTypeId>1</DeviceTypeId>
     <Disabled>false</Disabled>
   </Table>
</NewDataSet>

您可以使用简单的LINQ to XML查询从XML获取DeviceId(PK):

var id = (from n in xml.Root.Elements("Table")
          select n.Element("DeviceId").Value).SingleOrDefault();

返回:1

编辑*如果每个表都有不同的PK列名,那么你需要重写这个或写入特定于每个表的数据访问代码:

public static int GetTablePK(string identifier)
{
    return Convert.ToInt32((from n in xml.Root.Elements("Table")
          select n.Element(indentifier).Value).SingleOrDefault());
}

其中identifier是PK名称。这假设表格

具有类似的XML结构