0

以下で取得しようとしているデータベーステーブル(変数strXML)にXMLが保存されています。これが空白になる理由は何ですか?助けてください。データベースで直接プロシージャを実行すると、正常に機能しています。

        try
        {
            // Open the database connection
            using (SqlConnection myConn = my.openConnection("~",PConnectionString"))
            {
                // Initialize the SQL command object.
                using (SqlCommand myCOmmand = new SqlCommand("getCycleXML", myConn))
                {
                    myCOmmand.CommandType = CommandType.StoredProcedure;
                    // Add the parameters

                    SqlParameter parameter2 = new SqlParameter("@emailID", SqlDbType.NVarChar, 128);
                    parameter2.Value = strEmailID;
                    parameter2.Direction = ParameterDirection.Input;
                    myCOmmand.Parameters.Add(parameter2);

                    SqlParameter parameter1 = new SqlParameter("@pCode", SqlDbType.VarChar, 50);
                    parameter1.Value = strPCode;
                    parameter1.Direction = ParameterDirection.Input;
                    myCOmmand.Parameters.Add(parameter1);

                    SqlParameter parameter7 = new SqlParameter("@cID", SqlDbType.Int);
                    parameter7.Direction = ParameterDirection.Input;
                    parameter7.Value = icID;
                    myCOmmand.Parameters.Add(parameter7);

                    SqlParameter parameter9 = new SqlParameter("@cycleXML", SqlDbType.Xml);
                    parameter9.Direction = ParameterDirection.Output;
                    myCOmmand.Parameters.Add(parameter9);


                    SqlParameter parameter10 = new SqlParameter("@msg", SqlDbType.VarChar, 50);
                    parameter10.Direction = ParameterDirection.Output;
                    myCOmmand.Parameters.Add(parameter10);

                    SqlParameter parameter11 = new SqlParameter("@Success", SqlDbType.Int);
                    parameter11.Direction = ParameterDirection.Output;
                    myCOmmand.Parameters.Add(parameter11);
                    //Execute the command

                    myCOmmand.ExecuteNonQuery();
                    // Read the values of the output parameters
                    strXML = myCOmmand.Parameters["@cycleXML"].Value.ToString();

                   =================================================

ストアドプロシージャの定義は次のとおりです。

  USE [DMac]
  GO

  SET ANSI_NULLS ON
  GO
  SET QUOTED_IDENTIFIER ON
  GO

  CREATE PROCEDURE [dbo].[getCycleXML]
  @emailID Nvarchar(128),
  @cID varchar(50),
  @pCode varchar(50),
  @cycleXML xml output,
  @Success int output, 
  @msg varchar(50) output  

  AS
  BEGIN
  select XMLDefectCycle from dbo.CycleXML where EmailID=@emailID and PCode=@pCode and CID=@cID 
  END

==============================

コードが空白のXMLとして返される理由。データベース内の指定されたパラメーターについて、データベースからのXMLを期待していることを確認しました。

4

1 に答える 1

1

ストアドプロシージャで出力パラメータを設定していません

そのはず

select @cycleXML = XMLDefectCycle 
from dbo.CycleXML where EmailID=@emailID and PCode=@pCode and CID=@cID  

ExecuteScalar()または、代わりにストアドプロシージャを呼び出します

于 2012-08-27T12:00:04.543 に答える