调用时,存储过程的参数太多

时间:2014-05-14 04:43:07

标签: c# sql-server-2008

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

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();我有例外

  

程序或函数prAddSortament指定了太多参数。

有人能帮助我吗?

3 个答案:

答案 0 :(得分:1)

如果参数数量相同,请尝试检查其类型。看起来参数的数据类型存在一些不匹配。

答案 1 :(得分:1)

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

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系统存储过程并传递名称   存储过程作为参数。

答案 2 :(得分:0)

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