2013-03-07 126 views
0

我使用SQL Server 2012和Visual Studio 2010和我到目前爲止什麼職務服務員只選擇員工是一個單一的表INT數據庫和加載員工進入一個datagridview

小C#應用程序但是我想要做的只是選擇職位爲「服務員」的員工

到目前爲止,我已經編寫了關於添加記錄編輯刪除和顯示整個數據的查詢。

到目前爲止,我已經成功地顯示名稱僅通過讀取指定的列:

 private void LoadEmpName() 
     { 
      sc.Close(); 
      try 
      { 
       sc.Open(); 
       cmd.CommandText = "select * from myEmployees"; 
       dr = cmd.ExecuteReader(); 
       if (dr.HasRows) 
       { 
        while (dr.Read()) 
        { 

         lstNames.Items.Add(dr[1].ToString()); 
        } 
       } 
       sc.Close(); 

      } 
      catch (Exception e) 
      { 
       MessageBox.Show(e.ToString()); 
      } 
     } 

是否有可能使只顯示被列爲「服務員」員工改變我現有的代碼(第一姓名)還是我必須寫一個完全不同的查詢?

+0

只是注意:你不需要'如果(dr.HasRows)' - 如果沒有行,'dr.Read()'將返回false,而while循環將不執行。 – Blorgbeard 2013-03-07 21:35:32

回答

1
select * from myEmployees where jobtitle='Waiter' 
+0

您可能想在您的回答中添加更多描述。例如,請更改您的查詢等。 – 2013-03-07 21:49:46

2

如果你有一個名爲「JOBTITLE」欄,然後您的查詢就會變成:

"select * from myEmployees where JobTitle like '%waiter%'"; 

「喜歡」是比較操作符和「%」是任何數量的字符的通配符。

如果你想要查詢不同的東西,有幾種方法可以去。最簡單的是簡單地創建具有查詢字符串的兼職測試的新方法:

"select * from myEmployees where PartTime = 1"; 

但是,您將需要爲每一個可能的新的查詢搜索用戶可以做,這將成爲低效維持。

當你填充數據網格時,你應該看看在客戶端進行過濾。你帶來了所有的數據(如果你的數量很大,使用分頁),然後讓用戶通過指定他們自己的過濾器來決定他們感興趣的信息。

2

您應該爲您的SQL查詢添加where子句。我不知道你的數據庫結構,但類似;

cmd.CommandText = "select * from myEmployees where title='waiter'"; 

在SQL中而不是在C#中進行過濾要高效得多。

1
Discalimer

:在OP問:「有沒有可能,這樣只顯示被列爲‘服務員’員工改變我現有的代碼(僅第一名稱)或將我必須寫一個完全不同的查詢? 「

所以純粹回答你不'有'使用新的查詢。你可以放置一個,如果你添加喜歡在此之前(假設你的第二列是「職位」):

   while (dr.Read()) 
       { 
        if(dr[2].ToString().EqualsIgnoreCase("Waiter")){ 
         lstNames.Items.Add(dr[1].ToString()); 
        } 
       } 

雖然我不會推薦它。

+0

您可以擴展您爲什麼不會推薦它嗎? :) – Blorgbeard 2013-03-07 21:38:47

+3

只是因爲它不是正確的做法。正確的做法是將查詢修改爲僅選擇其他海報提及的所需的行。它更高效,更清潔。 – MickJ 2013-03-07 21:41:02

2

您將不得不更改查詢。這是更好的方法。 我喜歡@CrisF解決方案。只是除了它。

private void LoadEmpName() 
    { 

     try 
     { 
      sc.Open(); 
      //it will return all employees containing word waiter in Column JobTitle. 
      cmd.CommandText = "select * from myEmployees where JobTitle like '%waiter%' "; 

      dr = cmd.ExecuteReader(); 
      while (dr.Read()) 
      { 
       lstNames.Items.Add(dr[1].ToString()); 
      } 

     } 
     catch (Exception e) 
     { 
      MessageBox.Show(e.ToString()); 
     } 
     finally 
     { 
      sc.Close(); 
     } 
    }