2017-04-13 71 views
0

我有一个字符串,写出来就像一个XML文件。一个例子是这样的:在C中读取一个像XML格式的字符串#

string = <Employees><EmployeeId>1</EmployeeId><...></Employees> 

我这保存在一个表中,因为我想审计的变化,但我不希望有不同的审计多个表。这是因为它会记录员工以外的其他变化。所以在数据库中使用XML风格的字符串似乎是一个很好的建议。

现在到了真正的商业。我想检查以确保员工实际上发生了更改,因为可以进入编辑页面,不进行任何更改,然后单击保存。截至目前,数据将写入数据库,并将其与未更改的数据杂乱无章。

我希望能够检查将要保存的xml样式字符串是否在数据库中,因此如果<employees><employeeid>###</employeeid> == "changes"然后看看整个字符串是否等于另一个字符串。基本上,首先检查employeeId是否会改变,然后检查整个字符串以查看是否有任何区别。我会刚刚检查前n个号码,但ID号可能有1到3的长度。

另外,因为它被称为XML,有没有一种简单的方法来转换它来读取它像一个XML文件和检查方式?

+0

是使用XML LINQ:的XElement雇员= XElement.Parse(字符串); – jdweng

+0

您可以使用C#类来表示xml的数据。将已更改的属性与原始属性进行比较,然后将其序列化为xml。 – Fabio

回答

0

在列中存储任意数据是非规范化的一种形式。在数据库级别上,你无法真正做到这一点。但是,SQL Server确实有一个XML列类型。实体框架不支持映射到/来自XML列,因此它将简单地将您的XML视为标准字符串。不过,使用这种列类型,您可以使用XPath表达式针对您的XML编写实际的SQL查询。

然后,您最好打赌的是将您的列键入为XML,然后编写一个存储过程来执行您需要的查询。然后,您可以在Entity Framework中使用此存储过程。

有关XML列类型详细信息请参阅:https://msdn.microsoft.com/en-us/library/ms190798(SQL.90).aspx