ObjectDataSource——未能找到帶參數的非泛型方法

來源:互聯網
上載者:User

今天做一個簡單的網上書店 在做搜尋商品頁時用到了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  一切正常 。終於又解決了一個問題,雖然方法有可能有點笨拙,但我很欣慰。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.