当前位置: 首页 > 面试题库 >

“程序或函数指定了太多参数”。但事实并非如此。

赫连秦迟
2023-03-14
问题内容

提前谢谢您的帮助。非常感谢。

在经过两个多小时的检查后,由于得到“过程或函数指定了太多参数”的原因,其他Google结果出现了问题,但我没有找到有用的帮助。这样做的原因是,到处都可以看到我指定的参数过多,参数名称不正确或类型错误。这些都不符合我的情况。这是我的代码:

CREATE PROCEDURE dbo.sproc_UpdateInfo

(
@Name nvarchar(40),
@UserId varchar(50),
@Password varchar(50),
@Address nvarchar(120)
)

AS
Update tbl_Users SET Name=@Name, Password=@Password, Address=@Address WHERE UserId=@UserId


RETURN

这是C#方面的内容:

SqlCommand sqlCmd = new SqlCommand();
sqlCmd.CommandText = "sproc_UpdateInfo";
sqlCmd.CommandType = CommandType.StoredProcedure;

sqlCmd.Parameters.Add("@Name", SqlDbType.NVarChar, 40).Value = name;

sqlCmd.Parameters.Add("@UserId", SqlDbType.VarChar, 50).Value = userID;
sqlCmd.Parameters.Add("@Password", SqlDbType.VarChar, 50).Value = password;
sqlCmd.Parameters.Add("@Address", SqlDbType.NVarChar, 120).Value = address;

SqlConnection sqlConn = new SqlConnection(connectionString);

sqlCmd.Connection = sqlConn;

try
{
    sqlCmd.Connection.Open();

    int rowaffected = sqlCmd.ExecuteNonQuery(); //Error occurs here
    return rowaffected;
}
catch (SqlException se)
{
    throw new Exception("SqlException: sqlstr=" + sqlCmd.CommandText, se);
}
finally
{
    sqlCmd.Dispose();
    sqlConn.Close();
}

问题答案:

改成这个然后告诉我错误是否消失了…

sqlCmd.Parameters.Add("@Name", SqlDbType.NVarChar, 40).Value = name ?? "";

sqlCmd.Parameters.Add("@UserId", SqlDbType.VarChar, 50).Value = userID ?? "";
sqlCmd.Parameters.Add("@Password", SqlDbType.VarChar, 50).Value = password ?? "";
sqlCmd.Parameters.Add("@Address", SqlDbType.NVarChar, 120).Value = address ?? "";

此外,当您从代码执行查询时,请在服务器上运行跟踪:(这是方法:http
:
//databases.about.com/od/sqlserver/ht/trace.htm)

告诉我们执行结果是什么样的(您的sproc实际如何执行)以及是否被调用。

这里没有魔术。只有几件事可能会发生:

您没有执行与您认为的或已连接到错误的数据库或服务器的相同版本的sproc。检查存储过程的架构。确定执行的存储库是dbo。并且没有它的另一个版本,它的参数更少,不是dbo吗?这让我有几次。我会在错误的模式下意外地修改/创建一个sproc,并且当我的代码未指定哪个模式时,将改为执行我所登录用户的默认模式。确实,您必须进行跟踪。这是解决此类问题的基本方法。您实际上需要查看SQL试图执行的内容。将代码复制/粘贴到此处的注释部分。该代码是否会给您同样的错误?我敢打赌这是一个架构混乱,您有多个版本。听起来很无礼,但是要么是因为您不在同一台服务器/数据库上,要么就是您认为自己不在同一台服务器/数据库上。发生在我们当中最好的!:)

可能正在发生另一件事。主数据库中是否有该存储库的版本?如果是这样,请记住它将被执行,而不是您所连接的数据库中的任何存储程序。检查主数据库。如果您在此处创建它,并且它的参数较少,那可能就是您的问题。



 类似资料:
  • Scala 函数 一般情况下函数调用参数,就按照函数定义时的参数顺序一个个传递。但是我们也可以通过指定函数参数名,并且不需要按照顺序向函数传递参数,实例如下: object Test { def main(args: Array[String]) { printInt(b=5, a=7); } def printInt( a:Int, b:Int ) = {

  • 我有java代码,我改成kotlin了,我的代码是用pdf-viewer库显示pdf的,我不明白为什么我的代码是错误的,下面是错误: 指定为non-null的是null参数:方法kotlin.jvm.internal.intrinsics.CheckParameterIsNotNull,inputStream参数 这是我的密码

  • 本文向大家介绍PowerShell函数参数指定数据类型实例,包括了PowerShell函数参数指定数据类型实例的使用技巧和注意事项,需要的朋友参考一下 本文介绍在PowerShell创建自定义函数时,为必选参数设置强类型有什么好处,应该如何设置。 为了提高必选参数的安全性,PowerShell函数定义的最佳实践告诉我们,要为必选参数设置强类型。这是为什么呢,我们来看一个例子。 上面这个例子是接收用

  • 我有一个大型的实时数据库,其中大约1000个用户每分钟更新2个或更多的更新。同时,有4个用户正在获取报告和添加新的项目。到目前为止,主表包含大约200万和400万行。 使用这些表的查询花费了太多时间,即使是简单的查询,如: 分别用了10秒和26秒 大报告现在只需15分钟!!!太,太,太多时间了。 我使用的所有桌子都是innodb 在我读到关于名誉的文章之前,有没有什么方法可以解决这个问题?? 事先

  • 我有一个对象列表: 每一个都包含一个Object2列表。我试图遍历objList,以便从每个Object1各自的Object2列表中删除Object2的特定实例: 这会引发错误:“集合已修改;枚举操作可能无法执行。” 我不明白的是,我正在从Object2List中删除一个对象,它没有被枚举。为什么会抛出此错误?

  • 问题内容: 我在将控制器中定义的函数与指令中的回调函数绑定时遇到一些麻烦。我的代码如下所示: 在我的控制器中: 然后我的指令: 在我的html页面中: 上面的代码没有运气。根据我在各种教程中所读的内容,我知道我应该在HTML页面中指定参数? 问题答案: 您的代码中有一个小错误,请尝试以下代码,它应该对您有用