调用存储过程时参数太多

本文关键字:太多 参数 存储过程 调用 | 更新日期: 2023-09-27 18:03:09

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

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();上我有一个异常

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

有人能帮我吗?

调用存储过程时参数太多

如果参数数量相同,则尝试检查它们的类型。看起来参数的数据类型不匹配。

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

cmd.CommandText = "prAddSortament";

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

SQL Server Error Messages - Msg 8144

错误信息:Server: Msg 8144, Level 16, State 2, Procedure Stored过程或函数名,第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]
> 

服务器:Msg 8144, 16级,状态2,线路1dbo。unf_concat指定了太多的参数。

解决方案/方法:

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

这是我的大错。我使用的是两个版本的数据库,并且在连接字符串中指定了旧版本的DB,其中dbo。