テーブルの主キーを返すストア プロシージャを作成しました。Web サービスでこのストア プロシージャを呼び出し、XML ドキュメントからデータを渡します。返された主キーをXML形式でWebサービスに出力し、データベースでデータが更新されたことを確認したい。ストア プロシージャのコード:
Create PROCEDURE [dbo].[updateGamePlay]
@GamePlayID int,
@ParticipantID int,
@GameVersionID int,
@GameID int,
@GameScenarioID int,
@Start DateTime,
@End DateTime,
@Success varchar(10)
AS
UPDATE GamePlay
SET
ParticipantID = @ParticipantID,GameVersionID = @GameVersionID,GameID = @GameID,GameScenarioID = @GameScenarioID,StartDateTime = @Start,EndDateTime = @End,Success = @Success
WHERE GamePlayID = @GamePlayID
RETURN SCOPE_IDENTITY();
Web サービスは、XML 内のデータをローカル変数に割り当て、データベースに挿入します。戻り値の型を取得してWebサービス上にXMLで表示したい。
[WebMethod]
public void AddGamePlayData()
{
XmlDocument xd = new XmlDocument();
xd.Load(@"C:\Users\bradleya\Documents\Visual Studio 2010\Projects\Web Services\Web Services\addGame.xml");
XmlNode documentNode = xd.SelectSingleNode("/GamePlayData/GamePlay");
int ParticipantID = Convert.ToInt32(documentNode.SelectSingleNode("ParticipantID").InnerText);
int GameVersionID = Convert.ToInt32(documentNode.SelectSingleNode("GameVersionID").InnerText);
int GameID = Convert.ToInt32(documentNode.SelectSingleNode("GameID").InnerText);
int GameSenarioID = Convert.ToInt32(documentNode.SelectSingleNode("GameScenarioID").InnerText);
DateTime Start = Convert.ToDateTime(documentNode.SelectSingleNode("Start").InnerText);
DateTime End = Convert.ToDateTime(documentNode.SelectSingleNode("End").InnerText);
Boolean success = Convert.ToBoolean(documentNode.SelectSingleNode("Success").InnerText);
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 = Start;
cmd.Parameters.Add(new SqlParameter("@End", SqlDbType.DateTime));
cmd.Parameters["@End"].Value = End;
cmd.Parameters.Add(new SqlParameter("@success", SqlDbType.Bit));
cmd.Parameters["@success"].Value = success;
cmd.ExecuteNonQuery();
}
戻り値の型をオブジェクトに変更して次のコードを使用しようとしましたが、機能しません:
DataSet oDS = new DataSet();
SqlDataAdapter oCMD = new SqlDataAdapter(cmd);
oCMD.Fill(oDS, "GamePlay");
return oDS.GetXml();
- -編集 - -
うまくいくはずだと思った修正を使用したときのエラーは、返されるはずの整数を XML に含める必要があるということですが、代わりにこの XML を返します。
<?xml version="1.0" encoding="UTF-8"?>
<anyType xmlns="http://tempuri.org/" xmlns:d1p1="http://www.w3.org/2001/XMLSchema-instance" d1p1:type="q1:string" xmlns:q1="http://www.w3.org/2001/XMLSchema">
<NewDataSet />
</anyType>
前もって感謝します