[英]SQL query works in SQL Server Management Studio but not from ASP.Net application
[英]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.