0

私は現在、標準のWebサービスでこのメソッドを使用しています。

[WebMethod]
        public void addGame(int GamePlayID, int @ParticipantID, int @GameVersionID, string Start, string End,string success)
        {
            SqlConnection oConn = new SqlConnection();
            oConn.ConnectionString = @"Data Source=SNICKERS\SQLEXPRESS;Initial Catalog=VerveDatabase;Integrated Security=True";
            oConn.Open();
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = oConn;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "addGamePlay";
            cmd.Parameters.Add(new SqlParameter("@GamePlayID", SqlDbType.Int));
            cmd.Parameters["@GamePlayID"].Value = GamePlayID;
            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("@Start", SqlDbType.Time));
            cmd.Parameters["@Start"].Value = Start;
            cmd.Parameters.Add(new SqlParameter("@End", SqlDbType.Time));
            cmd.Parameters["@End"].Value = End;
            cmd.Parameters.Add(new SqlParameter("@success", SqlDbType.VarChar, 10));
            cmd.Parameters["@success"].Value = success;
            cmd.ExecuteNonQuery();
        }

これにより、手動で入力した値をデータベースに渡すことができますが、XMLドキュメントからデータをロードできるようにしたいと考えています。この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>
<Game> 
<GamePlayID>1</GamePlayID>
            <ParticipantID>1</ParticipantID> 
<GameVersionID>1</GameVersionID> 
<Start-Time>PT0S</Start-Time> 
<End-Time>PT5H</End-Time> 
<Success>true </Success> 
</Game>
</NewDataSet>
</anyType>
4

2 に答える 2

1

XMLタイプのパラメータを1つ持つストアドプロシージャを作成し、全体を送信することを考えました<NewDataSet>か?INSERTXQueryを使用して、私のアプリの1つからこれに似たXMLタイプからテーブルに直接挿入できます。

INSERT INTO CategoryItems (CategoryID, ItemID, SortOrderID) 
    SELECT @ID, 
        ParamValues.Item.value('./ID[1]', 'int'), 
        ParamValues.Item.value('./SortID[1]', 'int')
    FROM @Items.nodes('/Items/Item') AS ParamValues(Item) 

@ItemsXMLタイプです)

于 2012-07-25T13:37:27.507 に答える
0

これは本物の質問だったので、なぜ投票を取り下げたのかよくわかりませんが、どうやって問題を克服したのかを概説したいと思いました。私の特定のXMLドキュメントにはノードが1つしかないため、xmlDocumentの「selectSingleNode」関数を使用して必要なデータを選択し、SQLprocを介してデータベースに挿入できる変数に割り当てました。

[WebMethod]
        public void addGame()
        {
            XmlDocument xd = new XmlDocument();
            xd.Load(@"C:\Users\bradleya\Documents\Visual Studio 2010\Projects\Web Services\Web Services\addGame.xml");
            XmlNode documentNode = xd.SelectSingleNode("/NewDataSet/Game");

            int GamePlayID = Convert.ToInt32(documentNode.SelectSingleNode("GamePlayID").InnerText);
            int ParticipantID = Convert.ToInt32(documentNode.SelectSingleNode("ParticipantID").InnerText);
            int GameVersionID = Convert.ToInt32(documentNode.SelectSingleNode("ParticipantID").InnerText);
            string Start = Convert.ToString(documentNode.SelectSingleNode("Start-Time").InnerText);
            string End = Convert.ToString(documentNode.SelectSingleNode("End-Time").InnerText);
            string success = Convert.ToString(documentNode.SelectSingleNode("Success").InnerText);

            SqlConnection oConn = new SqlConnection();
            oConn.ConnectionString = @"Data Source=SNICKERS\SQLEXPRESS;Initial Catalog=VerveDatabase;Integrated Security=True";
            oConn.Open();
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = oConn;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "addGamePlay";
            cmd.Parameters.Add(new SqlParameter("@GamePlayID", SqlDbType.Int));
            cmd.Parameters["@GamePlayID"].Value = GamePlayID;
            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("@Start", SqlDbType.Time));
            cmd.Parameters["@Start"].Value = Start;
            cmd.Parameters.Add(new SqlParameter("@End", SqlDbType.Time));
            cmd.Parameters["@End"].Value = End;
            cmd.Parameters.Add(new SqlParameter("@success", SqlDbType.VarChar, 10));
            cmd.Parameters["@success"].Value = success;
            cmd.ExecuteNonQuery();
        }
于 2012-07-25T15:03:31.123 に答える