Получение SCOPE_IDENTITY от SQL Server при вставке - PullRequest
1 голос
/ 07 февраля 2011

Наверное, уже слишком поздно, и я слишком устал, чтобы понять, что я делаю не так.Вот что я пытаюсь:

int imageId = imageDal.AddImage(new SqlParameter[]
        {
            new SqlParameter("@IMAGE_ID", 
        SqlDbType.Int, Int32.MaxValue, ParameterDirection.Output,
        true, 0, 0,"IMAGE_ID", DataRowVersion.Current,DBNull.Value),

        new SqlParameter("@IMAGE", 
        SqlDbType.Image, 11, ParameterDirection.Input,
        true, 0, 0,"IMAGE", DataRowVersion.Current,image)
        });

public int AddImage(SqlParameter[] spParams)
{
    SqlHelper.ExecuteNonQuery(BaseDAL.ConnectionStringImages, INSERT_IMAGE_SQL, spParams);
    return Convert.ToInt32(spParams[0].Value);
}

Хранимая процедура:

[dbo].[sp_insert_image]
    -- Add the parameters for the stored procedure here
    @IMAGE_ID int OUT,
    @IMAGE image
AS
BEGIN
    INSERT INTO images
    (IMAGE)
    VALUES
    (@IMAGE)
    SELECT @IMAGE_ID = SCOPE_IDENTITY();
END
GO

Я получаю DBNull как spParams [0] .Value.Я попытался установить значение @IMAGE_ID на постоянную в моей хранимой процедуре, но это ничего не изменило, поэтому проблема не в моей хранимой процедуре (это то, что я думаю).

Когда я выполняю процедуру из sql management studio, я вижу, что insert_id возвращает ..

Ответы [ 3 ]

2 голосов
/ 07 февраля 2011

Я закончил с executesescalar и возвращал SCOPE_IDENTITY() напрямую из SP.

Если есть другой способ сделать это и получить значение из sqlparameter, я бы хотел услышать это.

1 голос
/ 07 февраля 2011

Полагаю, проблема в ExecuteNonQuery методе. Он возвращает массив объектов, а не массив sqlparam.

Просто создайте ссылку на выходной объект sqlparam и получите значение из этой ссылки.

Удачи!

P.S. Есть другое решение. Проверьте ссылку

http://www.dotnetmonster.com/Uwe/Forum.aspx/dotnet-distributed-apps/160/Data-Access-Application-Block-Output-Parameters

0 голосов
/ 17 июля 2015

ставишь вот так ....

[dbo].[sp_insert_image]
    -- Add the parameters for the stored procedure here
    @IMAGE_ID int OUT,
    @IMAGE image
AS
BEGIN
    INSERT INTO images (IMAGE) VALUES (@IMAGE)
    SET @IMAGE_ID  = SCOPE_IDENTITY();
END
GO
...