2010-11-04 20 views
0

我正在爲包含RTD服務器的C#中的Excel開發附加組件。因爲我們還沒有SQL數據庫,所以我必須使用XML文件來存儲數據。使用C#編寫和讀取相同的xml文件(RTD服務器用於excel)

XML文件通過Excel中使用的C#函數進行更新。另一方面,多個用戶必須能夠實時檢索這些數據。

當我運行這兩個函數(更新並讀取XML文件)時,寫入函數隨時崩潰,錯誤file being usee by another process

寫功能:

string _dataPath = Path.Combine(xllDir, "Test.xml"); 

     XmlDocument xmlDoc = new XmlDocument(); 

     xmlDoc.Load(_dataPath); 

     XmlNode node = xmlDoc.SelectSingleNode(Data_Type.ToUpper() + "/" + Ticker.ToUpper() + "/" + Data.ToUpper() + "/VALUE"); 

     node.InnerXml = Convert.ToString(Value); 

     XmlNode node_update = xmlDoc.SelectSingleNode(Data_Type.ToUpper() + "/" + Ticker.ToUpper() + "/" + Data.ToUpper() + "/LAST_UPDATE"); 
     node_update.InnerXml = Convert.ToString((DateTime.Now).TimeOfDay); 

     xmlDoc.Save(_dataPath); 

及讀取功能:

_xml.Load(topic.FileName); 
     XmlNode node = _xml.SelectSingleNode("//" + topic.Ticker); 
     topic.Value = node.InnerText; 

我看不出如何排序了這一點,所以任何想法會更受歡迎。

回答

0

你不能據我所知。定義一個映射您xml文件的類(例如public class Ticker)。實例化類的對象,當你更新XML文件:

node_update.InnerXml = Convert.ToString((DateTime.Now).TimeOfDay); 
var ticker = new Ticker(); 
ticker.tickerValue = node_update.InnerText; 

,並通過該對象訪問新的數據:

topic.Value = this.ticker.tickerValue; 

注意:您TICKER類和更新,可以使用觀察者模式它只要你更新XML文件。

1

我剛剛找到一個簡單的答案:

FileStream fs = new FileStream(FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
     _xml.Load(fs); 
     fs.Close(); 
     XmlNode node = _xml.SelectSingleNode("//" + Ticker); 
     return node.InnerText; 

通過這種方式,對於讀寫功能,沒有崩潰的。