ObjectDataSource“”未能找到带参数的非泛型方法“DelnewsClass”: newsClassID, original_NewsClassid。

用ObjectDataSource的老报这样的错误.

在网上找了些方法但是都不太让人满意.解决不了问题.

方法1意思就是说 BLL中的参数要和sql存储过程的参数一样.

在ASP.Net中对ObjectDataSource自动配置数据源的[删除]操作的时候,会生成两个字段一个是

OldValuesParameterFormatString="original_{0}"

另外一个是

<DeleteParameters>
                                  <asp:Parameter Name="original_XML_ID" Type="Int32" />
                              </DeleteParameters>

这里面OldValuesParameterFormatString是根据你设定的SQL语句中的参数确定的,而Parameter Name却是根据你的业务罗基层中删除函数的第一个参数确定的。
比如,业务逻辑层中你的删除组件是这样定义的,函数中的第一个参数就是ObjectDataSource生成的Parameter Name

[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Delete, true)]
      public bool DelXML(int original_XML_ID)
      {
          int rowsAffected = Adapter.Delete(original_XML_ID);

return rowsAffected == 1;
      }

这里要注意的是你BLL中DEL函数中的括弧中的参数名称和SQL中的参数名称如果不一样,则会出现“未能找到带参数的非泛型方法”得奇怪错误。不知道算不算是ASP.NET的BUG不过确实很讨厌。就连微软官方的教程(见www.asp.net)中都没有解决这个BUG。
Original_ID

照着上面的方法做了可还是要报错.

于是又继续找

方法二.设置ObjectDataSource   属性OldValuesParameterFormatString="{0}"

修改后果然不报错.

分析

CSDN

开放式并发ASP内建方法

OldValuesParameterFormatString属性的值必须映射到BLL里接收原始值的输入参数的名称。因为我们把这些参数命名为original_productName,original_supplierID,等等,我们可以让OldValuesParameterFormatString属性的值依旧是original_{0}。为了ObjectDataSource能够正确地将原始值传送到BLL方法,还有最后一个属性需要设置。不将原始值发送到BLL方法相应的输入参数。

original_{0}

如果让OldValuesParameterFormatString属性设置为除了默认值({0})以外的其它任何的值,都将在数据Web控件尝试调用ObjectDataSource的Update()或Delete()方法时引发一个错误,因为ObjectDataSource将尝试将这些原始值参数与UpdateParameters或DeleteParameters一起传入。注意: 如果你只是简单地从设计视图的属性窗口删除这个OldValuesParameterFormatString属性的值,这个属性依旧会存在于声明语法中,不过被设置为一个空字符串。所以,从声明语法里彻底地删除这个属性,或者从属性窗口将其设置为默认值,{0}。

某文章

ObjectDataSource包含了对应它关联的方法的每一个输入参数的parameter,就像当ObjectDataSource被配置为调用预期一个输入参数的查询方法(例如GetProductsByCategoryID(categoryID))时出现的SelectParameters一栏。正如我们马上即将看到的,这些DeleteParameters、UpdateParameters和InsertParameters的值在调用ObjectDataSource的Insert()、Update()或Delete()方法之前自动地通过GridView、DetailsView和FormView被设置。必要时这些值也可以通过编程设置,这在以后的章节里讨论。

使用数据源配置向导来配置ObjectDataSource的另一个影响是Visual Studio设置了OldValuesParameterFormatString属性为original_{0} 。这个属性值用来包含数据被编辑时的原始值,它在下面两种情况下非常有用:

·         如果,当编辑一条记录时,用户可以修改主键的值。在这种情况下,新的主键的值和原始的主键值都需要提供,这样具有这个原始主键值的数据库记录才可以被找到然后才能将它的值更新。

·         当使用开放式并发。开放式并发是为了保证同时操作的用户不至于覆盖另一个用户所做更改的一种技巧,这也是后面的教程中的一节(实现开放式并发)。

这个OldValuesParameterFormatString属性指明了隐含对象的更新和删除方法中对应原始值的输入参数的名称。我们将在探讨开发式并发的时候更详细地讨论这个属性和它的目的。不过暂时我放下它,因为我们的BLL的方法并不需要这些原始的值因此我们删除这个属性,这一点很重要。如果让OldValuesParameterFormatString属性设置为除了默认值({0})以外的其它任何的值,都将在数据Web控件尝试调用ObjectDataSource的Update()或Delete()方法时引发一个错误,因为ObjectDataSource将尝试将这些原始值参数与UpdateParameters或DeleteParameters一起传入。

如果对此不是十分清楚,别担心,我们将在未来的章节中研究这个属性和它的效用。暂时,一定要完全地从声明语法中完全地删除这个属性或者将它设置为默认值({0})。

注意: 如果你只是简单地从设计视图的属性窗口删除这个OldValuesParameterFormatString属性的值,这个属性依旧会存在于声明语法中,不过被设置为一个空字符串。不幸地,这将依旧导致上面提到的同样的问题。所以,从声明语法里彻底地删除这个属性,或者从属性窗口将其设置为默认值,{0}。

默认设置下业务层update语句里面的参数和界面层还有业务层select 语句里面的参数个数一定要一样

例如

select id,user,dept from user

若update user

set dept=:a

where user=:b

update语句里面少了id列更新的时候报这个错误,解决办法1select 里去了id列 解决办法2 update语句里加上id列

转载于:https://www.cnblogs.com/wangyingtao/archive/2008/02/05/1064891.html

ObjectDataSource未能找到带参数的非泛型方法的解决相关推荐

  1. ObjectDataSource未能找到带参数的非泛型方法

    ObjectDataSource未能找到带参数的非泛型方法的错误产生通常是由数据源配置更换引起的,比如方法的更换 解决此问题的方法是删除此数据源,重新新建数据源配置 假如只是简单的更换的话,缓存里还会 ...

  2. 报错未能找到程序集“platform.winmd”: 请使用 /AI 或通过设置 LIBPATH 环境变量指定程序集搜索路径,问题解决办法

    报错C1107 未能找到程序集"platform.winmd"和"Windows.winmd" 说在前面的话 文章供自己回顾学习使用(学生党踩坑总结) 做计算机 ...

  3. 未能找到任何适合于指定的区域性或非特定区域性的资源

    未能找到任何适合于指定的区域性或非特定区域性的资源.请确保在编译时已将"WindowsFormsDemo.UnifiedConfigListControl.resources"正确 ...

  4. 未能找到任何适合于指定的区域性或非特定区域性的资源。请确保在编译时已将“xxx.Resources.resources”正确嵌入或链接到程序集...

    今天在测试一个工程的时候,突然遇到了这样一个问题: 错误信息:System.Resources.MissingManifestResourceException: 未能找到任何适合于指定的区域或非特定 ...

  5. js循环动态绑定带参数函数遇到的问题及解决方案[转]

    今天写原生javascript时,想利用绑定事件实现类似jquery中on方法的功能:于是有了for循环里绑定事件,无意中发现定义类能解决好多问题! 例如:一个不确定长度的列表,在鼠标经过某一条的时候 ...

  6. 线性代数带参数的线性方程组的求法示例详解

    线性方程组的求法与示例详解 线性方程组 由n个1维未知量,m个方程组成的组合叫做线性方程组. 特别的当方程组右边的值全都是0时叫做齐次线性方程组. 增广矩阵 在系数矩阵的右边添上一列,该列由线性方程组 ...

  7. 未能找到存储过程sp__sp_WhoIsActive存储过程概述

    未能找到存储过程sp_ This article gives a comprehensive overview of custom stored procedure sp_whoisactive. 本 ...

  8. 未能找到该服务器列表,未能找到使用此主机名的服务器

    未能找到使用此主机名的服务器 内容精选 换一换 系统账号清理 将非登录用户的Shell设为/sbin/nologin usermod -s /sbin/nologin 用户名 锁定长期不使用的账号 u ...

  9. 未能找到服务器主机名,未能找到主机名服务器

    未能找到主机名服务器 内容精选 换一换 用户使用hostname命令查看不同镜像的裸金属服务器主机名,发现部分镜像的裸金属服务器主机名带后缀.novalocal,如示例所示:假设创建裸金属服务器时,用 ...

最新文章

  1. oc开发之block详解
  2. 对话图灵奖得主John Hennessy,他说对美国留学签证变化很忧心
  3. 九、序列参数集Sequence Paramater Set(SPS)解析
  4. LeetCode 452 Minimum Number of Arrows to Burst Balloons(贪心法)
  5. 方舟子:如何避免学术不端行为(zz)
  6. 那些年,程序员用过的行酒令
  7. ArcGIS Server开发的一些小经验
  8. 618 技术特辑(二)几百万人同时下单的秒杀,为什么越来越容易抢到了?
  9. 集群节点数和分片数关系_离子晶体配位数与离子半径比的关系
  10. python程序运行结果始终为0_Python:始终运行程序
  11. fifa15服务器位置,《FIFA 15》系统菜单界面图文详解 各游戏模式详解
  12. 【java学习之路】(java SE篇)009.IO
  13. VS2017开发.net core 时默认发布路径文件夹多个BPC
  14. OpenResty之 lua_shared_dict 指令
  15. AWVS 12下载与破解
  16. 马哥python培训班靠谱吗
  17. 博士申请 | 香港理工大学李青教授团队招收机器学习全奖博士/研究助理
  18. react 加粗_css字体如何加粗?
  19. BAT机器学习面试1000题系列大集合整理(320)
  20. 黑客教父郭盛华:提升家庭WiFi的10个方法

热门文章

  1. CES 2018即将揭幕:AI平台之争烽烟骤起
  2. 漫画:什么是 “代理模式” ?
  3. 漫画:前端发展史的江湖恩怨情仇
  4. 用 Python 画自画像?看完我笑了
  5. emWin GUIBuilder V5.40a 无法保存文件问题解决方案
  6. ubuntu下,py2,py3共存,/usr/bin/python: No module named virtualenvwrapper错误解决方法
  7. 关于linux内核的wait等待事件和wakeup的核心原理
  8. 麦司机博客项目技术选型-Java后端
  9. 设计模式(观察者模式)
  10. 用Vue撸一个『A-Z字母滑动检索菜单』