【问题标题】:Procedure or function xxxxx has too many arguments specified [duplicate]过程或函数 xxxxx 指定了太多参数 [重复]
【发布时间】:2019-05-28 10:46:47
【问题描述】:

我的存储过程如下:

ALTER PROCEDURE [dbo].[sp5]
    @mat NVARCHAR(1000) = NULL,
    @party NVARCHAR(1000) = NULL,
    @place NVARCHAR(1000) = NULL,
    @truk NVARCHAR(1000) = NULL,
    @qty NVARCHAR(10) = NULL,
    @ptm NVARCHAR(10) = NULL,
    @mop NVARCHAR(100) = NULL,
    @tos NVARCHAR(100) = NULL,
    @driver NVARCHAR(100) = NULL,
    @date1 DATE = NULL
AS
BEGIN
    DECLARE @sql NVARCHAR(4000); 
    DECLARE @params NVARCHAR(4000); 
    DECLARE @rate nvarchar(10); 

    SET @sql ='select  @rate = ['+@mat+']   from tblcos'+ ' where [Name] = @party' 
    set @params = '@party nvarchar (1000), @rate NVARCHAR(10) OUTPUT'  
    exec sp_executesql @sql, @params,@party= @party,@rate = @rate OUTPUT

    INSERT INTO tblsls([Party], [Place], [truk], [Material], [Qty], rate, 
                       [Payment], [MOP], [TOS], [driver], [Date]) 
        SELECT 
            @party, @place, @truk, @mat, @qty, @rate, 
            @ptm, @mop, @tos, @driver, @date1
END

aspx.cs代码文件如下:

namespace crusoft
{
    public partial class WebForm3 : System.Web.UI.Page
    {
        protected void Button1_Click(object sender, EventArgs e)
        {
            string cs = ConfigurationManager.ConnectionStrings["VRAConnectionString"].ConnectionString;

            SqlConnection con = new SqlConnection(cs);

            SqlCommand cmd = new SqlCommand("sp5", con);
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@date1", SqlDbType.Date).Value = Calendar1.SelectedDate.ToShortDateString();
            cmd.Parameters.AddWithValue("@party", SqlDbType.NVarChar).Value = Ddprt.SelectedValue;
            cmd.Parameters.AddWithValue("@place", SqlDbType.NVarChar).Value = tbpls.Text;
            cmd.Parameters.AddWithValue("@truk", SqlDbType.NVarChar).Value = Tbtru.Text;
            cmd.Parameters.AddWithValue("@mat", SqlDbType.NVarChar).Value = Ddmat.SelectedValue;
            cmd.Parameters.AddWithValue("@qty", SqlDbType.SmallInt).Value = Tbqty.Text;
            cmd.Parameters.Add("@rate", SqlDbType.NVarChar, 10);
            cmd.Parameters["@rate"].Direction = ParameterDirection.Output;

            cmd.Parameters.AddWithValue("@ptm", SqlDbType.NVarChar).Value = Tbptm.Text;
            cmd.Parameters.AddWithValue("@mop", SqlDbType.NVarChar).Value = Ddmop.SelectedValue;
            cmd.Parameters.AddWithValue("@tos", SqlDbType.NVarChar).Value = Ddtos.SelectedValue;
            cmd.Parameters.AddWithValue("@driver", SqlDbType.NVarChar).Value = Tbdri.Text;

            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
        }
    }
}

当我运行程序时它会失败,当我在没有@rate 参数的情况下执行时,一切正常,但我想使用@rate 参数执行。

我确信存储过程工作正常。

【问题讨论】:

  • 错误信息很容易解释,当 proc 只需要 10 个参数时,您尝试添加 11 个参数。
  • 您的sp5 存储过程没有收到任何名为rate 的参数。
  • 您的过程没有名为@rate 的参数!!!!
  • “但我想使用@rate 参数执行” - 然后将您的存储过程更改为拥有一个@rate 参数。
  • @rate 必须是参数,而不仅仅是过程内部的变量。还需要标记为OUTPUT

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


【解决方案1】:

在过程中包含@rate作为输出参数,代码应该没问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多