私は次のようなprocを持っています
CREATE PROCEDURE [dbo].[ExportTestAsXML]
@TestId int
AS
BEGIN
SET NOCOUNT ON;
declare @x xml;
set @x = (
select
(select * from table1 where testid = @TestId FOR XML auto, Type, Elements),
(select * from table2 where testid = @TestId FOR XML auto, Type, Elements),
(select * from table3
where objectiveid in
(select objectiveid from objectives where testid = @TestId)
FOR XML auto, Type, Elements),
(select * from table4
where objectiveid in
(select objectiveid from objectives where testid = @TestId)
FOR XML auto, Type, Elements),
(select * from table5
where questionid in
(select questionid from questions
where objectiveid in
(select objectiveid from objectives where testid = @TestId)
)
FOR XML auto, Type, Elements)
for xml path(''), type
);
select @x as my_xml
END
SQL Server 2005 Management Studioから実行すると、selectステートメントから結合されたXMLを含む単一のレコードを含むテーブルが表示されます。Webサービスコードから実行し、データテーブルビジュアライザーを使用してテーブルをチェックすると、テーブルは空になります。これが私がprocを実行するために使用するコードです
SqlParameter[] Parameters = new SqlParameter[1];
Parameters[0] = new SqlParameter();
Parameters[0].ParameterName = "@TestId";
Parameters[0].Value = TestId;
Parameters[0].SqlDbType = SqlDbType.Int;
Parameters[0].Size = 50;
DataTable data = ExecuteDataSet("ExportTestAsXML", Parameters);
private DataTable ExecuteDataSet(string storedProcName, SqlParameter[] parameters)
{
SqlCommand command = new SqlCommand();
command.CommandText = storedProcName;
command.Parameters.AddRange(parameters);
command.CommandType = CommandType.StoredProcedure;
command.Connection = (SqlConnection)dcMUPView.Connection;
command.Connection.Open();
command.Prepare();
SqlDataAdapter adapter = new SqlDataAdapter(command);
DataTable ds = new DataTable();
adapter.Fill(ds);
command.Connection.Close();
return ds;
}
何が起こっているのか分かりますか?