ディレクトリからXMLファイルを読み取り、データからオブジェクトを作成し、データをデータベースに渡すサービスを作成しました。以前はこれを機能させていましたが、何らかの理由でサービスがテーブル行を作成していますが、XMLファイルのデータではなく、データベースに0が自動的に挿入されています。私のコードは次のとおりです。
このWebサービスメソッドはXMLloader
クラスを起動します。
[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(gameObj));
}
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>
明確にするために-私の問題は、私のサービスがテーブル行を作成していることですが、変数は自動的に0に設定されています。これがコードからのものである理由を誰かが知っていますか?
前もって感謝します。
編集-要求されたストアドプロシージャが追加されたので、ありがとう
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