2011-02-07 71 views
1

我想現在已經太晚了,我太累了,看不清我做錯了什麼。下面是我想:插入時從SQL Server獲取SCOPE_IDENTITY

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中的過程中,我看到了inserted_id返回..

+0

看着它,這一切看起來理智的;例如,你已經設定了方向;我*假設*'INSERT_IMAGE_SQL'設置爲'[dbo]。[sp_insert_image]';我想知道是不是'SqlHelper'是歪曲事情,但這似乎......奇怪。 –

+0

它一定有什麼問題。如果我找不到解決方案,我將重新啓動計算機:)是private static string INSERT_IMAGE_SQL =「sp_insert_image」; 此外,該過程運行順利,行被插入,但我不能得到它的ID - 換句話說,在convert.toint32得到異常.. – Pabuc

+0

你引用'sp_insert_image',而不是'[dbo]。[sp_insert_image]' - 你的名字中是否有另外一個版本可以選擇?例如'[pabuc]。[sp_insert_image]'? –

回答

2

我結束了的ExecuteScalar和直接從SP返回SCOPE_IDENTITY()

如果還有另一種方法來獲取sqlparameter的值,我很樂意聽到這個。

0

你把篩選....

[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