2015-12-16 51 views
0

我已經爲大學創建了一個基本的電子商務網站,我遇到了排序和搜索我的產品表的問題,我的頁面顯示的產品很好。 該網站是在visual studio 2012中使用C#使用剃鬚刀v2標記。網站只能搜索或排序數據庫中的數據

@{ 
    Layout = "~/_SiteLayout.cshtml"; 
    Page.Title = "Store"; 
    var db = Database.Open("StarterSite"); 
    string sql = ""; 

    switch (Request["sort"]) 
    { 
     case "PriceASC": 
      sql = "SELECT * FROM Products order by Product_Price ASC"; 
      break; 
     case "PriceDESC": 
      sql = "SELECT * FROM Products order by Product_Price DESC"; 
      break; 
     default: 
      sql = "SELECT * FROM PRODUCTS ORDER BY Product_ID"; 
      break; 
    } 

    if (Request["search"] != "") 
    { 
     sql = "SELECT * FROM Products where Product_Keywords like '%" + Request["search"] + "%'"; 
    } 
} 

這是我使用的,獨立它們都工作的代碼,但是當我把它們放在一起這樣的,哪一個是第二,接管並打破了第一。我已經多次交換過它們來測試這個,關於如何讓它們很好地協作的任何想法?

+0

通過它時,「請求[」排序「]」的值是什麼? –

+0

當你使用調試器.. switch(Request [「sort」])的值是多少?Request [「sort」]是一個字符串或HttpRequest類型。如果是這樣,然後改變結尾爲 switch(Request [「sort」]。ToString())' – MethodMan

+0

我不知道如何讓debuger告訴我,但我試圖添加.ToString(),並且它只是給了一個編譯器錯誤「對象引用未設置爲對象的實例」Price (Lowest to Highest)多數民衆贊成在觸發它的鏈接,如果這就是你的意思 – lmprowse

回答

1

將它們組合起來不再有效的原因是因爲您正在覆蓋您在第一步中完成的查詢。我會做的是把這個過程分解成幾部分。

//declare your variable. I added a connection and command so I can include parameters in the process. 
string orderBy = ""; 
string whereClause = ""; 
string sql = ""; 

//create your order by clause 
switch (Request["sort"]) 
{ 
    case "PriceASC": 
     orderBy = "order by Product_Price ASC"; 
     break; 
    case "PriceDESC": 
     orderBy = "order by Product_Price DESC"; 
     break; 
    default: 
     orderBy = "ORDER BY Product_ID"; 
     break; 
} 

//create your where clause. 
if (!string.IsNullOrEmpty(Request["search"])) // forgot the ! here 
{ 
    whereClause = string.Format(" where Product_Keywords like '%{0}%'", Request["search"]); // very unsafe to plug this in. should use parameter 

} 

sql = string.Format("SELECT * FROM Products{0} {1}",whereClause, orderBy); //build your query string. if no search parameter was given the where clause will be blank, but the order by will still exist. 

@foreach (var row in db.Query(sql)) 
{ 
    //some code here 
} 
+0

我剛剛嘗試了代碼,但它不喜歡SqlConnection()和SqlCommand() ....說,無法找到它們的類型或名稱空間名稱,它們也表示請求在當前上下文中不存在。這是基於講師的示例代碼,除了字段名稱和內容幾乎相同外,他的工作還不錯。 – lmprowse

+0

@Improwse:我建議仔細閱讀並理解David介紹的變量'sql'字符串變量並將其應用於您的工作代碼 – quetzalcoatl

+0

對不起。我甚至沒有看到你的數據庫在頂部。我出於某種原因假設您使用System.Data.SqlClient命名空間。如果忽略連接和命令部分,則查詢字符串構建部分應該很好。 –