查看文章 |
第一次完全自己编DAL和BLL的函数,就碰上这么鬼的问题呵呵.走运,看来2005虽然变得格外方便了,但对于我们这些想还是想自己控制函数的人来说反而有更多枷锁了. 以下是举的例子: 在ASP.Net中对ObjectDataSource自动配置数据源的[删除]操作的时候,会生成两个字段一个是 OldValuesParameterFormatString="original_{0}" 另外一个是 <DeleteParameters> 这里面OldValuesParameterFormatString是根据你设定的SQL语句中的参数确定的,而Parameter Name却是根据你的业务罗基层中删除函数的第一个参数确定的。 [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Delete, true)] return rowsAffected == 1; 有的网友提出:"这里要注意的是你BLL中DEL函数中的括弧中的参数名称和SQL中的参数名称如果不一样,则会出现“未能找到带参数的非泛型方法”得奇怪错误。不知道算不算是ASP.NET的BUG不过确实很讨厌。就连微软官方的教程(见www.asp.net)中都没有解决这个BUG。" 也有网友说:所以其关键地方在于,ObjectDataSource数据源的参数要与GridView绑定字段的参数相同,这样才不会出现:“未能找到带参数的非泛型方法.....”的问题。 现在对问题认识比较深刻的Raincen 说: 最近在用ASP.net2.0做一个网站,用的强类型DataSet作为数据层,手写的BLL逻辑层,页面上使用ObjectDataSource作为绑定桥梁,很好用,比Asp.net1.1也省事不少,不过昨天遇到一个问题很是困扰了我! 通常在设计.xsd强类型DataSet时都可以通过Select方法的参数,自动生成Update和Delete方法,这个也很方便。为了实现严谨的分层思想,会在自己的逻辑层里再写这两个方法,这个时候需要注意的地方,就是要保证你的BLL里的方法和生成的方法参数数量、类型要保持一致。不然的话就会出现“未能找到带参数的非泛型方法…”的黄页错误,经过几次实践基本可以避免因参数个数而引发的此类问题,因为每次我会检查生成的方法语句和参数,有多余的地方我会手动清除。 昨天在家突然又报出“未能找到带参数的非泛型方法“UpdateChannel”: channelName, Remark, ID, Channel…” 的黄页,于是首先想到是不是参数个数问题,多次检查发现问题并不在此,搞的很是困扰和郁闷。 我的一个表里有 三个字段:ID,Channel,Remark,在设计DataSet选择了让它自动生成Update方法,在属性栏查看Update方法的三个参数是Channel,Remark,Original_ID,这是没有错的,又检查了我的BLL内的更新方法UpdateChannel(string channelName, string remark, int id),其中参数也是三个,但前的错误提示中有四个参数我怎么也没找到哪有四个参数的方法! 极度郁闷后发现是参数名称的问题, 在我的BLL的Update方法中,为了避免和方法体内的变量冲突,我把对应Cahnnel字段的参数取名为“channelName”,问题就出在这,执行的时候把它识别为新的参数,未能和Channel对应,于是把参数名改为channel,问题马上解决! 不知道大家有没有遇过类似问题, 也不知我的理解是否正确,欢迎讨论!
希望我也可以尽快解决,不过可能会非常麻烦.因为我所有的方法都是重写的.太多了…… |