簡體   English   中英

為什么ASP.NET不執行SQL Server Management Studio執行的查詢?

[英]Why ASP.NET doesn't excute query that SQL Server Management Studio does?

我有一個查詢:

SELECT BookID, BookName, Author, Price, PublishYear, b.categoryName AS Category 
FROM BOOKS a JOIN category b ON a.categoryID = b.categoryID 
WHERE b.categoryID = @category
ORDER BY a.BookID

使用@category = myDropDownList.SelectedValue.ToString(); 我有時想顯示不同類別的一些書籍,有時我想顯示所有類別的所有書籍。 當我嘗試顯示1類類別時,它會執行查詢,但是當我嘗試顯示全部類別時,我嘗試為@category賦予一個等於“ b.categoryID”的值(它也來自DropDownList),我的查詢現在是:

SELECT BookID, BookName, Author, Price, PublishYear, b.categoryName AS Category 
FROM BOOKS a JOIN category b ON a.categoryID = b.categoryID 
WHERE b.categoryID = b.categoryID
ORDER BY a.BookID

我試圖在SSMS中運行此查詢,但確實會執行。 但是在ASP.NET中卻沒有。 有人有解決辦法嗎?

那是因為您沒有得到您認為得到的查詢。 您實際上從ASP.Net獲得的條件是WHERE b.categoryID = 'b.categoryID' 顯然,這將無法正確執行。

嘗試這個:

SELECT BookID, BookName, Author, Price, PublishYear, b.categoryName AS Category 
FROM BOOKS a JOIN category b ON a.categoryID = b.categoryID 
WHERE b.categoryID = 
    CASE WHEN @category = 'b.categoryID' 
        THEN b.categoryID 
        ELSE @category 
    END
ORDER BY a.BookID

問題是,如果將@category設置為字符串“ b.categoryID”,則它將導致類似Where b.categoryID = 'b.categoryID'的查詢。 基本上,您不能通過參數傳入列或表的名稱。 相反,您可以使查詢動態化。

string query = "SELECT BookID, BookName, Author, Price, PublishYear, b.categoryName AS Category " +
               "FROM BOOKS a JOIN category b ON a.categoryID = b.categoryID " + 
               (filter ? "WHERE b.categoryID = @category " : "") +
               "ORDER BY a.BookID";

where filter是一個bool變量,它確定是否要包括where子句。 您還應該在創建(並將@category參數添加到SqlCommand if(filter)的代碼周圍放置一個if(filter)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM