1

このようなパラメーターがあります。

    comm.CommandText = "usp_ProjectsCreateNew";

    SqlParameter param = comm.CreateParameter();
    param.ParameterName = "@ProjectId";
    param.Direction = ParameterDirection.Output;
    param.DbType = DbType.Int32;
    comm.Parameters.Add(param);

    param = comm.CreateParameter();
    param.ParameterName = "@ProjectHeading";
    param.Value = heading;
    comm.Parameters.Add(param);

    param = comm.CreateParameter();
    param.ParameterName = "@ProjectLongDescription";
    param.Value = longSummary;
    comm.Parameters.Add(param);

    param = comm.CreateParameter();
    param.ParameterName = "@ProjectUrl";
    param.Value = url;
    comm.Parameters.Add(param);

    param = comm.CreateParameter();
    param.ParameterName = "@PromoFront";
    param.Value = promoFront;
    comm.Parameters.Add(param);

    param = comm.CreateParameter();
    param.ParameterName = "@ProjectThumbnail";
    param.Value = thumbnailFileName;
    comm.Parameters.Add(param);

    param = comm.CreateParameter();
    param.ParameterName = "@ProjectImage2";
    param.Value = imageFileName1;
    comm.Parameters.Add(param);

    param = comm.CreateParameter();
    param.ParameterName = "@ProjectImage3";
    param.Value = imageFileName2;
    comm.Parameters.Add(param);

    param = comm.CreateParameter();
    param.ParameterName = "@ProjectImage4";
    param.Value = imageFileName3;
    comm.Parameters.Add(param);

    param = comm.CreateParameter();
    param.ParameterName = "@ProjectImage5";
    param.Value = imageFileName4;
    comm.Parameters.Add(param);

    comm.Transaction = tran;
    int result = comm.ExecuteNonQuery();

私のストアド プロシージャ コードは次のようなものです。

CREATE PROC [dbo].[usp_ProjectsCreateNew]
(
    @ProjectId INT output,
    @ProjectHeading varchar(100),
    @ProjectLongDescription varchar(max),
    @ProjectUrl varchar(100),
    @PromoFront bit,
    @ProjectThumbnail varchar(50),
    @ProjectImage2 varchar(50),
    @ProjectImage3 varchar(50),
    @ProjectImage4 varchar(50),
    @ProjectImage5 varchar(50)
)
AS
BEGIN TRY
    BEGIN TRAN
        INSERT INTO [Projects]([ProjectHeading], [ProjectLongSummary], [ProjectUrl],
            [PromoFront], [ProjectThumbnail], [ProjectImage2], [ProjectImage3], [ProjectImage4], [ProjectImage5])
        VALUES(@ProjectHeading, @ProjectLongDescription, @ProjectUrl, 
            @PromoFront, @ProjectThumbnail, @ProjectImage2, @ProjectImage3, @ProjectImage4, @ProjectImage5);

        SELECT @ProjectId = @@IDENTITY;
    COMMIT TRAN
END Try
BEGIN CATCH
    PRINT Error_Message();
    ROLLBACK TRAN
END CATCH

しかし、このエラーが発生しています。

メッセージ: プロシージャまたは関数 'usp_ProjectsCreateNew' には、指定されていないパラメーター '@ProjectId' が必要です。

ソース: .Net SqlClient データ プロバイダー

メソッド: Void OnError(System.Data.SqlClient.SqlException, Boolean, System.Action`1[System.Action])

4

1 に答える 1

2

まず第一にSqlCommand、ストアド プロシージャであることを伝えていません。

次の行を追加します。

comm.CommandType = CommandType.StoredProcedure;

comm.CommandTextプロパティを設定した直後。

次に、パラメーターの一部が明確ではありません-パラメーターを作成してSqlCommandオブジェクトに追加するには、次のようなものを使用することをお勧めします。

cmd.Parameters.Add("@PromoFront", SqlDbType.Bit).Value = 1;

私は常にSqlDbTypefor each パラメータを明示的に定義して、それが何であるかを完全に明確にします。そうしないと、望ましくない結果が生じる可能性があります。

于 2012-07-28T10:33:44.357 に答える