2017-04-13 77 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