2012-08-06 79 views
0

我寫了從目錄中創建對象從數據中讀取XML文件,並將數據傳遞到數據庫的服務。我想檢查每個遊戲對象是否更新了數據庫,以及是否正確更新了數據庫,如果因任何原因沒有正確添加文件,請刪除該文件。我想將文件移動到錯誤文件夾供以後處理。檢查數據庫進行了更新,然後刪除文件

[WebMethod] 
public void RunService() 
{ 
    //Call XML loader to get collection of XML documents 
    foreach (GamePlay value in XMLLoader.Start()) 
    { 
     value.addNewGamePlay(); 
    } 
    //call inject data method for each collection 
} 

這XMLLoader類返回遊戲對象數組:

public static Array Start() 
{ 
    string[] filePaths = Directory.GetFiles(@"C:\Users\bradleya\Desktop\XML\"); 
    List<GamePlay> gameObj = new List<GamePlay>(); 

    foreach (string value in filePaths) 
    { 
     XmlDocument xd = new XmlDocument(); 
     xd.Load(value); 
     XmlNode documentNode = xd.SelectSingleNode("/GamePlayData/GamePlay"); 

     GamePlay newGame = new GamePlay(); 
     newGame.setType(Convert.ToString(documentNode.SelectSingleNode("type").InnerText)); 
     newGame.setGamePlayID(Convert.ToInt32(documentNode.SelectSingleNode("GamePlayID").InnerText)); 
     newGame.setParticipantID(Convert.ToInt32(documentNode.SelectSingleNode("ParticipantID").InnerText)); 
     newGame.setGameVersionID(Convert.ToInt32(documentNode.SelectSingleNode("GameVersionID").InnerText)); 
     newGame.setGameID(Convert.ToInt32(documentNode.SelectSingleNode("GameID").InnerText)); 
     newGame.setGameScenarioID(Convert.ToInt32(documentNode.SelectSingleNode("GameScenarioID").InnerText)); 
     newGame.setStartDateTime(Convert.ToDateTime(documentNode.SelectSingleNode("Start").InnerText)); 
     newGame.setEndDateTime(Convert.ToDateTime(documentNode.SelectSingleNode("End").InnerText)); 
     newGame.setSuccess(Convert.ToBoolean(documentNode.SelectSingleNode("Success").InnerText)); 

     gameObj.Add(new GamePlay); 
    } 

    return gameObj.ToArray(); 
} 

此方法在於把對象相關變量數據訪問層中的對象類燒製:

public void addNewGamePlay() 
{ 
    // dataaccess method call to add GamePlay 
    // (from the DB) is then set for the object 
    DataAccessConn.createNewGamePlay(this.ParticipantID, this.GameVersionID, this.GameID, this.GameScenarioID, this.StartDateTime, this.EndDateTime, this.success); 
} 

:最後,將數據經由數據訪問層的方法這裏傳遞到數據庫210

我想通過XML文件是:

<?xml version="1.0" encoding="utf-8" ?> 
    <GamePlayData> 
     <GamePlay> 
     <type>add</type> 
     <GamePlayID>1</GamePlayID> 
     <ParticipantID>1</ParticipantID> 
     <GameVersionID>1</GameVersionID> 
     <GameID>1</GameID> 
     <GameScenarioID>1</GameScenarioID> 
     <Start>22/01/2012 23:59:59</Start> 
     <End>22/01/2012 23:59:59</End> 
     <Success>False</Success> 
     </GamePlay> 
    </GamePlayData> 

的addGamePlay存儲過程是:

CREATE PROCEDURE [dbo].[addGamePlay] 
@ParticipantID int, 
@GameVersionID int, 
@GameID int, 
@GameScenarioID int, 
@Start dateTime, 
@End dateTime, 
@Success varchar(10) 
AS 
INSERT INTO GamePlay(ParticipantID,GameVersionID,GameID,GameScenarioID,StartDateTime,EndDateTime,Success) 
VALUES (@ParticipantID,@GameVersionID,@GameID,@GameScenarioID,@Start,@End,@Success) 
return @@identity 

爲了澄清我的問題,我想補充審定的形式檢查如果在我從目錄中刪除文件或將其移動到錯誤文件夾之前,文件被正確讀取並且數據正確傳遞到數據庫中。我正在考慮在對象類中創建一個名爲「rootFile」的變量,以便我可以輕鬆地將其刪除,並在測試通過測試時將其添加到Run服務方法中刪除,否則刪除但我不確定該語法,是最好的方法。任何建議表示讚賞。謝謝。

回答

0

一個從我簡單的建議,算上沒有。的xml文件中存在的記錄,並且當您在表中插入記錄時,它也會返回no。受影響的行。如果兩個數字相等,那麼數據庫會被正確更新,否則會發生一些錯誤,希望您能理解它。

+0

好的建議,謝謝。唯一的問題是它從目錄中的許多XML文件獲取數據,所以我需要指出發生錯誤的XML文件。我只需要找到一種方法來檢查foreach循環,如果更新成功 – Bradley 2012-08-06 14:12:32

+0

您是在單個步驟中插入數據還是逐個讀取xml並插入表中?如果您正在讀取並一次插入一個xml,則計數xml中的記錄以及受sp影響的no.of行,如果不是該文件在內存中的名稱(viewstate,session),則檢查它們是否相等。你現在面臨什麼問題? – 2012-08-06 14:52:08