1

そのように見えるストアドプロシージャがあります。

ALTER PROCEDURE dbo.addPackage(

    @PackageStatus                      VARCHAR(50) = null,
    @OrgCode                            VARCHAR(50) = null,
    @SystemID                           VARCHAR(50) = null,
    @ID                               int OUTPUT
)
AS
BEGIN
    insert into package_table
    (
            PackageStatus,
            OrgCode,
            SystemID
            )
            values
            (@PackageStatus, 
            @OrgCode, 
            @SystemID
            )
            SET @ID =  SCOPE_IDENTITY()
END

そして私の関数は次のパラメータをsqlコマンドに追加して呼び出しますsqlCommand.ExecuteNonQuery();

List<SqlParameter> parameters = new List<SqlParameter>();

parameters.Add(new SqlParameter("@PackageStatus", package.PackageStatus));
parameters.Add(new SqlParameter("@OrgCode", package.OrgCode));
 parameters.Add(new SqlParameter("@SystemID", package.SystemID));

SqlParameter outParameter = new SqlParameter("@ID", SqlDbType.Int);
outParameter.Direction = ParameterDirection.Output;
parameters.Add(outParameter);

しかし、outパラメータが宣言されていて、ストアドプロシージャが終了する前に設定しているにもかかわらず、ストアドポークエデュアevneから0が返され続けています。IDの自動インクリメント値を使用してレコードが正常に追加されましたが、出力パラメーターを取得してもIDは返されません。0に設定されます。

助言がありますか?

4

1 に答える 1

4

出力パラメーターを定義しましたが、呼び出し後にそれを読み取り.ExecuteNonQuery()ますか?残念ながら、あなたはそのコードを表示していません...

基本的に、あなたは必要です

SqlCommand cmd = new SqlCommand(..., connection); .....

// set up your parameter as above

connection.Open();
cmd.ExecuteNonQuery();

var outputValue = cmd.Parameters["@APID"].Value;  // you need to read it out!

connection.Close();

あなたはこれをしていますか?そして、それはあなたがいつも0を取り戻しているところですか?

出力パラメータは呼び出しからの戻り値ではありません.ExecuteNonQuery()。呼び出し後にパラメータ値を明示的に読み取る必要があります。

于 2011-12-13T17:06:52.363 に答える