ObjectDataSource——未能找到带参数的非泛型方法
2011-04-10 18:01
435 查看
今天做一个简单的网上书店 在做搜索商品页时用到了ListView分页,即将根据商品名称或描述搜索到的商品分页,我将数据集中查询某一页的sql语句定义为:
SELECT *
FROM (SELECT Id, ProductID, Name, Description, Image, Listprice, Numinstock, CategoryId,
row_number() OVER (ORDER BY id) rownum
FROM Catalog
WHERE (Name LIKE '%' + LTRIM(RTRIM(@mmNameStr)) + '%') OR
(Description LIKE '%' + LTRIM(RTRIM(@mmNameStr)) + '%')) t
WHERE t .rownum > @startRowIndex AND
t .rownum <= @startRowIndex + @maximumRows
将查询所有满足条件的记录条数的查询定义为:
SELECT COUNT(*) AS Expr1
FROM Catalog
WHERE (Name LIKE '%' + LTRIM(RTRIM(@mmNameStr)) + '%') OR
(Description LIKE '%' + LTRIM(RTRIM(@mmNameStr)) + '%')
这样便成功分页了。但接下来又遇到了一个难题:
就是要实现一个更复杂的搜索功能,增加根据商品种类查询:
这时有两种解决方案:一是修改查询某一页的sql语句,将两个查询条件整合到一起,不过我感觉这样安全性不是很好,除非用存储过程。
第二种方案将根据种类查询的条件单独定义:
//查询某一页的sql语句
SELECT *
FROM (SELECT id, productid, name, description, image, listprice, numinstock, categoryid,
row_number() OVER (ORDER BY id) rownum
FROM catalog
WHERE categoryid = @categoryid) t
WHERE t .rownum > @startRowIndex AND
t .rownum <= @startRowIndex + @maximumRows
//查询所有满足条件的记录条数的查询
SELECT COUNT(*) FROM Catalog where CategoryId=@categoryid
最后我选择了第二种方法,但在添加查询某一页的sql语句时categoryid参数老是不能自动添加上,无奈只能比着mmNameStr参数手动添加,并在查询结果页面加载的时候修改objectDataSource的SelectMethod和SelectCountMethod,可是添加完后测试老是报“未能找到带参数的非泛型方法”的错误,后来我发现源代码中有:
<SelectParameters>
<asp:QueryStringParameter Name="mmNameStr" QueryStringField="name"
Type="String" />
</SelectParameters>
于是我又添加了:
<SelectParameters>
<asp:QueryStringParameter Name="categoryid" QueryStringField="CatId" Type="Int32"/>
</SelectParameters>
可修改完后还是报“未能找到带参数的非泛型方法”。
整了好久都没解决,反正我知道,错误的根源肯定就是,在添加根据种类查询某一页的sql语句时参数不能自动添加。
后来我又一想干脆再添加一个ObjectDataSource,当搜索结果页加载的时候修改ListView的DataSourceID,说做就做。
修改完成后,又给新加的ObjectDataSource添加了下面的代码:
<SelectParameters>
<asp:QueryStringParameter Name="categoryid" QueryStringField="CatId" Type="Int32"/>
</SelectParameters>
OK 一切正常 。终于又解决了一个问题,虽然方法有可能有点笨拙,但我很欣慰。
SELECT *
FROM (SELECT Id, ProductID, Name, Description, Image, Listprice, Numinstock, CategoryId,
row_number() OVER (ORDER BY id) rownum
FROM Catalog
WHERE (Name LIKE '%' + LTRIM(RTRIM(@mmNameStr)) + '%') OR
(Description LIKE '%' + LTRIM(RTRIM(@mmNameStr)) + '%')) t
WHERE t .rownum > @startRowIndex AND
t .rownum <= @startRowIndex + @maximumRows
将查询所有满足条件的记录条数的查询定义为:
SELECT COUNT(*) AS Expr1
FROM Catalog
WHERE (Name LIKE '%' + LTRIM(RTRIM(@mmNameStr)) + '%') OR
(Description LIKE '%' + LTRIM(RTRIM(@mmNameStr)) + '%')
这样便成功分页了。但接下来又遇到了一个难题:
就是要实现一个更复杂的搜索功能,增加根据商品种类查询:
这时有两种解决方案:一是修改查询某一页的sql语句,将两个查询条件整合到一起,不过我感觉这样安全性不是很好,除非用存储过程。
第二种方案将根据种类查询的条件单独定义:
//查询某一页的sql语句
SELECT *
FROM (SELECT id, productid, name, description, image, listprice, numinstock, categoryid,
row_number() OVER (ORDER BY id) rownum
FROM catalog
WHERE categoryid = @categoryid) t
WHERE t .rownum > @startRowIndex AND
t .rownum <= @startRowIndex + @maximumRows
//查询所有满足条件的记录条数的查询
SELECT COUNT(*) FROM Catalog where CategoryId=@categoryid
最后我选择了第二种方法,但在添加查询某一页的sql语句时categoryid参数老是不能自动添加上,无奈只能比着mmNameStr参数手动添加,并在查询结果页面加载的时候修改objectDataSource的SelectMethod和SelectCountMethod,可是添加完后测试老是报“未能找到带参数的非泛型方法”的错误,后来我发现源代码中有:
<SelectParameters>
<asp:QueryStringParameter Name="mmNameStr" QueryStringField="name"
Type="String" />
</SelectParameters>
于是我又添加了:
<SelectParameters>
<asp:QueryStringParameter Name="categoryid" QueryStringField="CatId" Type="Int32"/>
</SelectParameters>
可修改完后还是报“未能找到带参数的非泛型方法”。
整了好久都没解决,反正我知道,错误的根源肯定就是,在添加根据种类查询某一页的sql语句时参数不能自动添加。
后来我又一想干脆再添加一个ObjectDataSource,当搜索结果页加载的时候修改ListView的DataSourceID,说做就做。
修改完成后,又给新加的ObjectDataSource添加了下面的代码:
<SelectParameters>
<asp:QueryStringParameter Name="categoryid" QueryStringField="CatId" Type="Int32"/>
</SelectParameters>
OK 一切正常 。终于又解决了一个问题,虽然方法有可能有点笨拙,但我很欣慰。
相关文章推荐
- ObjectDataSource未能找到带参数的非泛型方法的解决
- objectdatasource 未能找到带参数的非泛型方法
- ObjectDataSource未能找到带参数的非泛型方法"DeleteArticleById":ArticleID
- ObjectDataSource未能找到带参数的非泛型方法的的解决以及自定义更新参数的探究
- ObjectDataSource未能找到带参数的非泛型方法的解决
- ObjectDataSource“odbList”未能找到接受“MyBookShop.Model.Admin”类型的参数的非泛型方法“DeleteAdmin”。
- ObjectDataSource“odbList”未能找到接受“MyBookShop.Model.Admin”类型的参数的非泛型方法“DeleteAdmin”。
- ObjectDataSource控件执行Delete操作时,出现“未能找到带参数的非泛型方法”的解决方案
- ASP.NET "未能找到带参数的非泛型方法" 的解决方法
- ObjectDataSource“ObjectDataSource1”未能找到带参数的非泛型方法
- 解决:未能找到带参数的非泛型方法..
- 未能找到不带参数的非泛型方法
- ASP.NET2.0中对GridView删除操作时“未能找到带参数的非泛型方法”的解决方案
- 未能找到带参数的非泛型方法
- ObjectDataSource未能找到带参数的非泛型方法
- 未能找到带参数的非泛型方法
- ObjectDataSource“ObjectDataSource1”未能找到带参数的非泛型方法
- ObjectDataSource控件执行Delete操作时,出现“未能找到带参数的非泛型方法”的解决方案
- 解决ObjectDataSource的"未能找到带参数的非泛型方法"异常
- asp.net中ObjectDataSource“”未能找到带参数的非泛型方法“DelnewsClass”: p1, id 问题