How to troubleshoot 'Procedure or function has too many arguments specified' in asp.net 2.0

本文介绍了解决ASP.NET 2.0中存储过程或函数指定过多参数问题的方法。通过调整GridView控件设置及存储过程参数,确保正确处理数据库更新、删除或插入操作。
How to troubleshoot 'Procedure or function has too many arguments specified' in asp.net 2.0
 
If you are using a sqlDataSource to handle updates, deletes or inserts to an underlying database from a gridview control, then you may run across this message:

Procedure or function <stored procedure name> has too many arguments specified

This usually means what it says, that your update, delete or insert command is trying to pass more parameters than the stored procedure is set up to handle. This can happen because each datakeyname specified in the gridview control is automatically being sent to the stored procedure. So if you try to also define extra parameters, you will be passing too many. Also, using the refresh parameters button within the datasource wizard will create a parameter for a return value even if your stored procedure does not define one, so if your stored procedure does not have a return value you should remove this parameter.

If you are getting this error, it is helpful to view the parameters being passed as they happen. So, lets use the delete command as an example. Add this code to your code behind page

Protected Sub sqlDataSource1(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs) Handles sqlDataSource1.Deleting
For x As Integer = 0 To e.Command.Parameters.Count - 1
Trace.Write(e.Command.Parameters(x).ParameterName)
Trace.Write(e.Command.Parameters(x).Value)
Next

End Sub

 

And at the top of your .aspx page in the page directives add @trace="true" (the line will look something like this):

<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false"
CodeFile="default.aspx.vb" Inherits="default" title="Default" Trace="true"%>

Now when you click the delete command, you will see trace entries for the page. Near the top you will see individual lines for each parameter like this

 @EngineerID0.01203288832592350.001463
 80.01206435822991980.000031
 @original_ServerLogicalID0.01208231989114140.000018
 1860.01210103653910070.000019
 @original_ServerName0.01211859311607610.000018
 SERVER10.0121361221021740.000018

So now you can see each parameter being passed. If the parameter names in your stored procedure do not match, then these values will not make it to your stored procedure. The parameter that is passed is based on the select command, so if you can't alter your stored procedure to change parameter names, then change your select statement to something like

Select ServerName as original_ServerName, .....

Updated 2.14.06

If you are using an objectDataSource instead of a sqlDataSource the syntax to find values and keys is different. The example below is for accessing a value when you know the key name, I haven't gotten around to enumerating through all values yet.

Protected Sub objectDataSource1_Deleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ObjectDataSourceMethodEventArgs) Handles objectDataSource1.Deleting
Dim paramsFromPage As IDictionary = e.InputParameters

Trace.Write("original_AppID:" & paramsFromPage("original_AppID").ToString)
Trace.Write("ServiceID:" & paramsFromPage("ServiceID").ToString)
End Sub

以下为本人的菜鸟英语翻译,适合不喜欢看英语的朋友- -#,如被误导,纯属巧合,高手还是建议看原文

如何解决asp.net2.0中'Procedure or function has too many arguments specified'( 存储过程或函数指定过多参数)的问题

如果你通过gridView 使用sqlDataSource来对数据库处理更新,删除或添加动作,那你可能会遇到以下信息:

Procedure or function <stored procedure name> has too many arguments specified( 存储过程或函数指定过多参数)

这条信息通常指如果你执行更新,删除或添加命令时传递的参数超过存储过程设定的参数.引起这种情况的可能是gridView控件里指定的datakeyName被自动传送给存储过程.因此如果你指定了其它的参数,你将传递过多的参数.而且,在datasource向导中如果使用'刷新参数'按钮将会创建一个return value的参数,即使你的存储过程并没有指定,所以如果你的存储过程并没有定义return value的参数,你应该把它删掉.

如果错误依旧存在,查看参数的传递过程将会有所帮助.让我们来以删除命令举例,添加以下代码到你的.cs页面

Protected Sub sqlDataSource1(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs) Handles sqlDataSource1.Deleting
For x As Integer = 0 To e.Command.Parameters.Count - 1
Trace.Write(e.Command.Parameters(x).ParameterName)
Trace.Write(e.Command.Parameters(x).Value)
Next

End Sub

在你.aspx的页面顶部页面指令添加@trace="true"(像下面的代码)

<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false"
CodeFile="default.aspx.vb" Inherits="default" title="Default" Trace="true"%>

当你点击删除按钮,你会看到类似以下代码

 

@EngineerID0.01203288832592350.001463
80.01206435822991980.000031
@original_ServerLogicalID0.01208231989114140.000018
1860.01210103653910070.000019
@original_ServerName0.01211859311607610.000018
SERVER10.0121361221021740.000018
现在你能够看到每个被传递的参数.如果它们哪些和你的存储过程指定的参数不匹配就不要传递给存储过程,参数的传递是建立在查询命令上的,因此如果你不能修改存储过程的参数,那就像这样修改查询语句:

Select ServerName as original_ServerName, .....

更新于 2.14.06

如果你使用的是objectDataSource,那么查找关键词和值的语法会有所不同.下面的例子是用于查看一个已知名的值.我还没有做过枚举所有的值.

Protected Sub objectDataSource1_Deleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ObjectDataSourceMethodEventArgs) Handles objectDataSource1.Deleting
Dim paramsFromPage As IDictionary = e.InputParameters

Trace.Write("original_AppID:" & paramsFromPage("original_AppID").ToString)
Trace.Write("ServiceID:" & paramsFromPage("ServiceID").ToString)
End Sub

译者注:经过实践研究证明,不只gridView的datakeynames会自动传递参数,在gridView中使用了
<%# bind("xxx") %>也会引起自动传递,所以大家写代码的时候醒目点

这个是完整源码 python实现 大数据 Spark pyspark 可视化大屏+Kafka+FastAPI+Vue3 【大数据毕业设计】基于Spark实时电商用户行为分析与预测(Python版本+pyspark+可视化大屏+Kafka+FastAPI+Vue3) 源码+论文 完整版 数据库Mysql 随着电子商务规模持续扩大,用户在浏览、加购、收藏与购买等环节产生的行为数据呈现高并发、高吞吐与强时效特征。传统离线批处理分析难以满足运营决策对实时性的要求。本文设计并实现了一套基于 Spark 的实时电商用户行为分析与预测系统,围绕“数据采集—流式计算—指标落库—可视化展示—销售预测”的完整链路展开研究与工程实践。 系统采用前后端分离架构:前端基于 Vue3、Element Plus 与 ECharts 构建管理端与数据大屏;后端采用 Python FastAPI 提供 RESTful 接口,并结合 JWT 完成管理员身份认证;实时链路以 Kafka 作为消息中间件承接行为事件,以 Spark Structured Streaming 完成按小时窗口的 PV、UV、加购、收藏、购买与销售额聚合;预测模块基于 Spark ML 线性回归对销售额序列进行建模,并输出 RMSE、MAE、MAPE 等误差指标。数据持久化采用 MySQL,数据库名为 db_ecommerce,核心业务表均以 t_ 前缀命名。 测试结果表明,系统能够稳定完成管理员登录、个人中心维护、行为与商品管理、实时统计展示、销售预测对比及流水线状态监控等功能,具备较好的可扩展性与教学示范价值,可为电商运营提供实时洞察与辅助决策支持。 本文的主要工作包括:完成系统需求分析与总体架构设计;绘制实体属性图与实体关系图并完成八张核心业务表设计;实现基于 Kafka 与 Spark 的实时统计及销售预测链路;完成 Vue
内容概要:本文系统研究了LLC谐振变换器在变频移相混合控制策略下的工作特性与运行模态,通过Matlab/Simulink平台构建详细的仿真模型,深入分析其在不同工况下的动态响应、软开关实现条件、电压增益特性及功率传输能力。研究重点涵盖变频与移相控制的协同作用机制,优化谐振参数设计以提升变换器在宽输入电压和宽负载范围内的效率与稳定性,并对关键工作模态进行划分与解析,揭示各模态间的切换规律与性能差异,为高性能LLC变换器的设计与控制提供理论依据和技术支撑。; 适合人群:具备电力电子与电力传动基础知识的科研人员及工程技术人员,特别适用于从事高频高效电源变换、新能源发电系统、电动汽车充电技术等相关领域的研究生、高校教师及企业研发工程师。; 使用场景及目标:①掌握LLC谐振变换器复合控制策略的设计方法与实现流程;②深入理解变频移相混合控制对ZVS/ZCS软开关条件和系统效率的影响机理;③利用Simulink仿真复现并分析不同运行模态的动态行为,优化控制参数以提升系统整体性能; 阅读建议:建议结合提供的Simulink仿真模型进行同步学习,重点关注控制逻辑的实现细节、模态切换边界条件以及仿真结果的波形分析,同时参考相关学术文献加深对LLC非线性特性和谐振拓扑稳态建模的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值