【问题标题】:Sending Parameter to stored procedure向存储过程发送参数
【发布时间】:2014-07-11 15:41:54
【问题描述】:

不知道哪部分代码错了。

这是我的存储过程

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);
}

只有 subject[i] 可以为空

但我不知道它什么时候进入存储过程并检查id_subject是否为假或代码的其他部分?

【问题讨论】:

  • 出现什么错误?也可以在最后的return中放一个断点,这样就可以看到所有的参数值了
  • 这是错误:过程或函数“AddNewNews”需要参数“@id_subject3”,但未提供。
  • 这是一个 STORED 过程 - 就像在 SQL Server 中的 STORED 中一样。它与“商店”无关......

标签: c# asp.net sql sql-server stored-procedures


【解决方案1】:

将参数更改为您的存储过程以具有默认值:

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

【讨论】:

  • 当他传递空值时,值不会发送到存储的proc?
  • @NicolasR 当传递 NULL 值时,该参数被忽略。
  • 非常感谢它的工作。我工作了7个小时。但我找不到它
【解决方案2】:

“只是 subject[i] 可以为 null,但我不知道它何时进入存储过程并检查 id_subject 是否为 false 或代码的其他部分?”

如果我理解正确,那么那些subject[i] 值可能是null。传递值 null 不起作用 - 该值将无法正确传递。

相反,将参数发送到您的存储过程,如下所示:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    相关资源
    最近更新 更多