2014-07-11 62 views
-1

我不知道哪部分代碼是錯誤的。發送參數到存儲過程

這是我的存儲過程

ALTER PROCEDURE dbo.AddNewNews 
(@title nvarchar(50), 
@text ntext, 
@year int, 
@month int, 
@day int, 
@id_writer int , 
@id_subject1 int, 
@id_subject2 int, 
@id_subject3 int, 
@id_subject4 int, 
@id_subject5 int) 
AS 
    SET NOCOUNT ON 

    BEGIN TRANSACTION; 

    DECLARE @last_id_news int 
    BEGIN TRY 

     insert into news(title, text, year, month, day, id_writer) 
     values(@title, @text, @year, @month, @day, @id_writer) 

     set @last_id_news = SCOPE_IDENTITY() 

if @id_subject1 is not null 
begin 
    insert into news_subject (id_news,id_subject) values (@last_id_news,@id_subject1) 
end 
if @id_subject2 is not null 
begin 
    insert into news_subject (id_news,id_subject) values (@last_id_news,@id_subject2) 
end 
if @id_subject3 is not null 
begin 
    insert into news_subject (id_news,id_subject) values (@last_id_news,@id_subject3) 
end 
if @id_subject4 is not null 
begin 
    insert into news_subject (id_news,id_subject) values (@last_id_news,@id_subject4) 
end 
if @id_subject5 is not null 
begin 
    insert into news_subject (id_news,id_subject) values (@last_id_news,@id_subject5) 
end 

    COMMIT TRANSACTION; 
END TRY 
BEGIN CATCH 

ROLLBACK TRANSACTION; 
END CATCH; 

RETURN 

,這是我送參數存儲過程從我的C#代碼:

public bool AddNewNews(News news, List<object> subject) 
{ 
    SqlParameter[] parameters = new SqlParameter[] 
    { 
     new SqlParameter ("@title", news.Id_news), 
     new SqlParameter ("@text", news.Text), 
     new SqlParameter ("@year", news.Year), 
     new SqlParameter ("@month", news.Month), 
     new SqlParameter ("@day", news.Day), 
     new SqlParameter ("@id_writer", news.Id_writer), 
     new SqlParameter ("@id_subject1", subject[0]), 
     new SqlParameter ("@id_subject2", subject[1]), 
     new SqlParameter ("@id_subject3", subject[2]), 
     new SqlParameter ("@id_subject4", subject[3]), 
     new SqlParameter ("@id_subject5", subject[4]) 
    }; 
    return SqlDBHelper.ExecuteNonQuery("AddNewNews", CommandType.StoredProcedure, parameters); 
} 

就在主題[I]可以爲空

但我不知道什麼時候去存儲過程和檢查id_subject是錯誤的或其他部分的代碼?

+1

是什麼讓你覺得這是錯的?你是否收到語法錯誤或異常? –

+0

出現什麼錯誤?您也可以在最後一個返回中放置一個斷點,以便您可以看到所有參數值 –

+0

這是錯誤:過程或函數'AddNewNews'需要參數'@ id_subject3',它沒有提供。 – nimaSadeghpour

回答

3

更改參數的存儲過程有默認值:

@id_subject1 int = null, 
@id_subject2 int = null, 
@id_subject3 int = null, 
@id_subject4 int = null, 
@id_subject5 int = null 
+0

當他傳遞空值時,值不會發送到存儲過程? –

+0

@NicolasR當傳遞NULL值時,參數被忽略。 – JBrooks

+0

好的,很高興知道,謝謝! –

1

"just the subject[i] can be null but i don't know when it goes to the store procedure and check id_subject is false or other part of code?"

如果我理解正確的話,那麼這些subject[i]值可能是null。通過值null不起作用 - 值不會正確傳遞。

相反,發送參數存儲過程是這樣的:

new SqlParameter ("@id_subject3",subject[2] ?? DBNull.Value)