使用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>
答案 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名称。这假设表格