私はそうであるようなストアドプロシージャを持っています。sqlCommand.ExecuteNonQuery()を使用してスコープのIDを返す
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かかわらず、バック保存porcuedureから0を得続けますストアドプロシージャが終了する前に。レコードは正常にIDの自動インクリメント値で追加されますが、出力パラメータを取得するとIDは返されません。それは0に設定されています。
何か提案がありますか?
出力パラメータの代わりにスカラ値を返すことはできますか? IMHOを扱いやすくなりました。 – sfuqua
コードが間違っているようです。あなたのパラメータ名はiD(小文字のI)として定義され、SET文はID(大文字のI)とコードを使用して、完全に異なるAPIDを使用する出力パラメータの値を取得します。使用している実際のコードを投稿できますか? –
私はメモ帳++で自分のコードを変更しました。実際の値は正しいです。私はできるだけジェネリックにしたいと思っていました。それがエラーの理由ではありませんでした。私はそれ以来、問題の原因を見つけました。 – gsirianni