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クラスは、GamePlayオブジェクトの配列を返します。

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); 
} 

最後に、データはここでデータアクセス層メソッドを介してデータベースに渡されます。

public static void createNewGamePlay(int ParticipantID, int GameVersionID,int GameID,int GameSenarioID,DateTime Start,DateTime End,Boolean success) 
{ 
   SqlConnection oConn = new SqlConnection(); 
   oConn.ConnectionString = @"Data Source=SNICKERS\SQLEXPRESS;Initial Catalog=VervePhaseOne;Integrated Security=True"; 

   oConn.Open(); 

   SqlCommand cmd = new SqlCommand(); 
   cmd.Connection = oConn; 
   cmd.CommandType = CommandType.StoredProcedure; 
   cmd.CommandText = "addGamePlay"; 

   cmd.Parameters.Add(new SqlParameter("@ParticipantID", SqlDbType.Int)); 
   cmd.Parameters["@ParticipantID"].Value = ParticipantID; 
   cmd.Parameters.Add(new SqlParameter("@GameVersionID", SqlDbType.Int)); 
   cmd.Parameters["@GameVersionID"].Value = GameVersionID; 
   cmd.Parameters.Add(new SqlParameter("@GameID", SqlDbType.Int)); 
   cmd.Parameters["@GameID"].Value = GameID; 
   cmd.Parameters.Add(new SqlParameter("@GameScenarioID", SqlDbType.Int)); 
   cmd.Parameters["@GameScenarioID"].Value = GameSenarioID; 
   cmd.Parameters.Add(new SqlParameter("@Start", SqlDbType.DateTime)); 
   cmd.Parameters["@Start"].Value = DateTime.Now; 
   cmd.Parameters.Add(new SqlParameter("@End", SqlDbType.DateTime)); 
   cmd.Parameters["@End"].Value = DateTime.Now; 
   cmd.Parameters.Add(new SqlParameter("@success", SqlDbType.Bit)); 
   cmd.Parameters["@success"].Value = success; 

   cmd.ExecuteNonQuery(); 
}

私が渡そうとしている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サービスメソッドにテストを追加できます。それ以外の場合は削除しますが、構文やこれについてはわかりません。最良の方法です。任意の提案をいただければ幸いです。ありがとう。

4

1 に答える 1

0

私からの簡単な提案はノーです。xmlファイルに存在するレコードの数であり、レコードをテーブルに挿入すると、noも返されます。影響を受ける行の数。両方の数値が等しい場合、データベースは正しく更新されています。それ以外の場合は、エラーが発生しました。ご理解いただければ幸いです。

于 2012-08-06T14:07:45.737 に答える