【问题标题】:Stored procedure has too many parameters when being called [duplicate]存储过程被调用时参数过多[重复]
【发布时间】:2014-05-14 04:43:06
【问题描述】:

我有一个带参数的存储过程:

ALTER PROCEDURE [dbo].[prAddSortament]
    @Name varchar(255),
    @ProcessingId varchar(35),
    @ShapeId varchar(35),
    @GostId varchar(35),
    @PartOfId varchar(35),
    @DescrArr varchar(max),--varbinary,
    @tsVal varchar(max),
    @SM varchar(max)
AS
BEGIN

我是这样从我的程序中调用它的:

using (SqlConnection con = new SqlConnection(Properties.Settings.Default.MiSConStr))
{
   SqlCommand cmd = new SqlCommand("dbo.prAddSortament", con);
   cmd.CommandType = CommandType.StoredProcedure;

   cmd.Parameters.AddWithValue("@Name", sort.Name);
   cmd.Parameters.AddWithValue("@ProcessingId", sort.Processing.ObjectId);
   cmd.Parameters.AddWithValue("@ShapeId", sort.Shap.ObjectId);
   cmd.Parameters.AddWithValue("@GostId", sort.Gost);
   cmd.Parameters.AddWithValue("@PartOfId", sort.PartOf);
   cmd.Parameters.AddWithValue("@DescrArr", sort.Description);
   cmd.Parameters.AddWithValue("@tsVal", ts);
   cmd.Parameters.AddWithValue("@SM", sortMat);

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

cmd.ExeccutrNonQuery();我有一个例外

过程或函数 prAddSortment 指定的参数过多。

谁能帮帮我?

【问题讨论】:

标签: c# sql-server-2008


【解决方案1】:

如果参数数量相同,则尝试检查它们的类型。参数的数据类型似乎有些不匹配。

【讨论】:

    【解决方案2】:

    添加下面的代码它将指定您要添加的存储过程:-

    cmd.CommandText = "prAddSortament";
    

    此类错误的额外信息,详见此处http://www.sql-server-helper.com/error-messages/msg-8144.aspx:-

    SQL Server 错误消息 - 消息 8144

    错误消息:服务器:消息 8144,级别 16,状态 2,已存储过程 过程或函数名称,第 0 行 已存储过程或函数 过程或函数名称指定的参数过多。

    原因:

    如消息所述,当您在 将参数或参数传递给函数或存储过程 这超出了函数或存储过程的预期。

    To illustrate, let’s say you have the following function definition:
    > CREATE FUNCTION [dbo].[ufn_Concat] ( @pString1 VARCHAR(10), @pString2
    > VARCHAR(10) ) RETURNS VARCHAR(20) AS BEGIN
    >     RETURN ISNULL(@pString1 + ' ', '') + ISNULL(@pString2, '') END
    

     This function expects only 2 arguments, namely @pString1 and
    > @pString2.  To use this function, you do the following: SELECT
    > [dbo].[ufn_Concat] ( [FirstName], [LastName] ) AS [FullName] FROM
    > [dbo].[Customers]
    

    The error will be encountered you pass more than 2 arguments or
    > parameters to the function, as follows: SELECT [dbo].[ufn_Concat] (
    > [FirstName], [MiddleName], [LastName] ) AS [FullName] FROM
    > [dbo].[Customers]
    > 
    

    服务器:消息 8144,级别 16,状态 2,行 1 过程或函数 dbo.ufn_Concat 指定的参数过多。

    解决方案/解决方法:

    为避免发生此错误,请始终确保通过 与存储过程或函数相同数量的参数 期待。要知道存储过程预期的参数,您 可以使用 sp_help 系统存储过程并传递名称 存储过程作为参数。

    【讨论】:

    • 我在构造函数中指定。
    • 参数类型必须与@Gleb表格中的一致
    • 你的 SP @Gleb 中的 --varbinary 是什么??
    【解决方案3】:

    那是我的大错。我正在使用两个版本的数据库,并且在连接字符串中指定了旧版本的数据库,其中 dbo.prAddSortment 存在但参数较少。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-09
      • 1970-01-01
      相关资源
      最近更新 更多