0

テーブルの主キーを返すストア プロシージャを作成しました。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>

前もって感謝します

4

1 に答える 1

0

戻り値が必要な場合は関数を使用する必要があります。それ以外の場合は、select ステートメントを使用して結果を出力します。

このようなもの:

Create PROCEDURE [dbo].[updateGamePlay]
    @GamePlayID int,
    @ParticipantID int,
    @GameVersionID int,
    @GameID int,
    @GameScenarioID int,
    @Start DateTime,
    @End DateTime,
    @Success varchar(10)
AS
    UPDATE GamePlay
    OUTPUT INSERTED.GamePlayID
    SET 
    ParticipantID = @ParticipantID,GameVersionID = @GameVersionID,GameID = @GameID,GameScenarioID = @GameScenarioID,StartDateTime = @Start,EndDateTime = @End,Success = @Success
WHERE GamePlayID = @GamePlayID
于 2012-08-02T08:14:29.173 に答える