C# 过程或函数在winform c中指定的参数太多#

C# 过程或函数在winform c中指定的参数太多#,c#,sql-server,winforms,stored-procedures,C#,Sql Server,Winforms,Stored Procedures,这是我的代码,我得到的错误是: 过程或函数指定的参数太多 以下是存储过程: cmmd.Parameters.AddWithValue("@MemberID", vowMemID.Text); cmmd.Parameters.AddWithValue("@vowAmount", vowAmount.Text); cmmd.Parameters.AddWithValue("@vowDate", vowdateTime.Text); cmmd.Parameters.AddWithValue("@vow

这是我的代码,我得到的错误是:

过程或函数指定的参数太多

以下是存储过程:

cmmd.Parameters.AddWithValue("@MemberID", vowMemID.Text);
cmmd.Parameters.AddWithValue("@vowAmount", vowAmount.Text);
cmmd.Parameters.AddWithValue("@vowDate", vowdateTime.Text);
cmmd.Parameters.AddWithValue("@vowDesc", vowDescBox.Text);
cmmd.ExecuteNonQuery();                   

insertStoredProcedure.ExecuteNonQuery();  // error occurs here
insertStoredProcedure.Parameters.Clear();

storedprocedure.ExecuteNonQuery();    // and here
storedprocedure.Parameters.Clear();
UPDATEINCOME
存储过程更新
IncomeReport
表。它将此处指定为
IncomeDate
的特定日期的所有金额相加,并将总额插入
IncomeReports


同时,
INsertDate
存储过程检查
IncomeReport
表是否具有“cmmd”命令要在其下插入金额的日期。如果没有,它也会输入从
IncomeDate
获取的日期。这就允许
更新income
在日期为
@IncomeDate

的表中插入一个金额,您正在添加两个
@IncomeDate
参数。不要那样做;p

ALTER PROCEDURE [dbo].[UPDATEINCOME] 
    (@IncomeDate date, @VowAmount money) 
AS
    Declare @TitheAmount money
    Declare @OfferingAmount money
    Declare @IncomeTotal money

    IF NOT EXISTS (Select VowDate from Vows where VowDate = @IncomeDate)
    BEGIN
        set @VowAmount = '0'
    END
    ELSE 
    BEGIN
        set @VowAmount = (Select VowAmount from Vows where VowDate = @IncomeDate)
    END

    IF NOT EXISTS (Select OfferingDate from Offering where OfferingDate = @IncomeDate)
    BEGIN
        set @OfferingAmount = '0'
    END
    ELSE 
    BEGIN
       set @OfferingAmount = (Select OfferingAmount from Offering where OfferingDate = @IncomeDate)
    END

    IF NOT EXISTS (Select TitheDate from Tithe where TitheDate = @IncomeDate)
    BEGIN
        set @TitheAmount = '0'
    END
    ELSE
    BEGIN
       Set @TitheAmount = (Select TitheAmount from Tithe where TitheDate = @IncomeDate)
    END

    Set @IncomeTotal = @TitheAmount + @VowAmount + @OfferingAmount

    UPDATE IncomeReport 
    SET Amount = @IncomeTotal 
    WHERE IncDATE = @IncomeDate
和(正如斯利拉姆在评论中指出的):

如果需要,可以捕获
参数的结果。添加

storedprocedure.Parameters.Add(new SqlParameter("@IncomeDate", SqlDbType.Date)).Value = vowdateTime.Text;
...
storedprocedure.Parameters.Add("@IncomeDate", SqlDbType.Date).Direction = ParameterDirection.Input;
但是,
Input
是默认值

坦白说,你让这件事变得很难。我在此强烈推荐一种类似“dapper”的工具:


工作完成。

您正在添加两个
@IncomeDate
参数。不要那样做;p

ALTER PROCEDURE [dbo].[UPDATEINCOME] 
    (@IncomeDate date, @VowAmount money) 
AS
    Declare @TitheAmount money
    Declare @OfferingAmount money
    Declare @IncomeTotal money

    IF NOT EXISTS (Select VowDate from Vows where VowDate = @IncomeDate)
    BEGIN
        set @VowAmount = '0'
    END
    ELSE 
    BEGIN
        set @VowAmount = (Select VowAmount from Vows where VowDate = @IncomeDate)
    END

    IF NOT EXISTS (Select OfferingDate from Offering where OfferingDate = @IncomeDate)
    BEGIN
        set @OfferingAmount = '0'
    END
    ELSE 
    BEGIN
       set @OfferingAmount = (Select OfferingAmount from Offering where OfferingDate = @IncomeDate)
    END

    IF NOT EXISTS (Select TitheDate from Tithe where TitheDate = @IncomeDate)
    BEGIN
        set @TitheAmount = '0'
    END
    ELSE
    BEGIN
       Set @TitheAmount = (Select TitheAmount from Tithe where TitheDate = @IncomeDate)
    END

    Set @IncomeTotal = @TitheAmount + @VowAmount + @OfferingAmount

    UPDATE IncomeReport 
    SET Amount = @IncomeTotal 
    WHERE IncDATE = @IncomeDate
和(正如斯利拉姆在评论中指出的):

如果需要,可以捕获
参数的结果。添加

storedprocedure.Parameters.Add(new SqlParameter("@IncomeDate", SqlDbType.Date)).Value = vowdateTime.Text;
...
storedprocedure.Parameters.Add("@IncomeDate", SqlDbType.Date).Direction = ParameterDirection.Input;
但是,
Input
是默认值

坦白说,你让这件事变得很难。我在此强烈推荐一种类似“dapper”的工具:


工作完成。

我对此感到非常困惑。您是否注意到这两个变量是不同的
storeproc
storedprocedure
?两者都指向不同的命令:(@SriramSakthivel再次查看…(我在编辑中对此进行了澄清)是的,我忽略了它。OP对
storedprocedure
变量也犯了同样的错误。参考第4行和第8行都将
@IncomeDate
添加到
storedprocedure
简单地说:这段代码乱七八糟。OP真的应该重构它。至少用换行符分隔不相关的代码块会使它更可读。我非常赞同你是否注意到这两个变量都是不同的
storeproc
storedprocedure
?它们都指向不同的命令:(@SriramSakthivel再次查看…(我在编辑中对此进行了澄清)是的,我忽略了它。OP对
storedprocedure
变量也犯了同样的错误。参考第4行和第8行都将
@IncomeDate
添加到
storedprocedure
简单地说:这段代码乱七八糟。OP真的应该重构它。至少用换行符分隔不相关的代码块会使它更可读。你不需要实际显示
InsertIncomeDate
,因此我们无法评论参数是否合适。您实际上没有显示
InsertIncomeDate
,因此我们无法评论参数是否合适
var p = storeproc.Parameters.Add(new SqlParameter("@IncomeDate", SqlDbType.Date));
p.Value = vowdateTime.Text;
p.Direction = ParameterDirection.Input;
DateTime when = ...
decimal amount = ...
connection.Execute("UPDATEINCOME",
    new { IncomeDate = when, VowAmount = amount },
    commandType: CommandType.StoredProcedure);