2014-11-23 94 views
0

我做了一個asp應用程序,它允許用戶搜索數據庫中的記錄。我通過允許用戶每次按搜索按鈕時只搜索一行來改變這種情況。但是我的代碼並不真正起作用! 類產品:選擇第一行Asp.net

public DataTable SelectRow() 
    { 
    string sql = "SELECT TOP 1 * FROM Products ORDER BY ProductID ASEC"; 
    return SelectRow(sql); 
    } 
    public DataTable SelectRow(string Query) 
    { 
    try 
    { 
     return db.RunQuery(Query); 
    } 
    catch 
    { 
     return new DataTable(); 
    } 

鍵搜索:

protected void btnSearch_Click(object sender, EventArgs e) 
    { 
     grid.DataSource = product.SelectRow(); 
     DataBind(); 
     lblMsg.Text = ""; 
     btnRemove.Enabled = false; 
     btnUpdate.Enabled = false; 
     grid.SelectedIndex = -1; 

     } 

請你不介意改變我的代碼,讓我尋找一條記錄的時間。謝謝。

+0

爲什麼你的'SelectRow()'方法返回一個布爾值?它不應該返回實際的行嗎? – dotnetom 2014-11-23 10:32:20

+0

你使用了什麼數據庫? – 2014-11-23 10:33:49

+0

數據庫SQL Server – Loay 2014-11-23 10:42:02

回答

0

您的SQL無效,並且您的異常處理正在吞嚥將向您顯示的異常。

有作爲ASEC沒有這樣的事情 - 就是應該簡單地ASC

string sql = "SELECT TOP 1 * FROM Products ORDER BY ProductID ASC"; 

因爲你有一個try沒有任何形式的真正後果(一個非常糟糕的做法),如一個重新拋出或一些日誌記錄,實際的異常被吞噬。你正在運行catch塊,它返回一個空的DataTable

不要這樣做。完全擺脫try區塊 - 讓異常氣泡。如果你已經這樣做了,你幾乎可以立即發現問題。

不要使用異常處理作爲流量控制機制 - 這是一個不好的做法。

+0

它完美的工作!非常感謝你的貢獻,我很欣賞它。你有一個關於使用try catch的觀點!如果發現任何異常,我認爲這是一個很好的機制。當你提到這是一種不好的做法時,我同意你的看法,但在某些場合它有點方便。 – Loay 2014-11-23 11:59:22

+0

@Layay - 可能。但是非常罕見的場合。默認情況下,最好不要那樣做。 – Oded 2014-11-23 12:00:17