2017-05-04 61 views
0

我遇到了一個問題,將SqlDataReader對象的值傳遞給switch語句 - 或者其他任何事情。簡而言之,我正在閱讀顯示其角色的員工表中的專欄。爲了向他們呈現適當的工具,我需要知道他們的角色是什麼。當我打開開關時,rec是空的。從SqlDataReader中檢索值並傳遞給開關或者語句

using (SqlCommand readEmployeeRecords = con.CreateCommand()) { 
    readEmployeeRecords.CommandText = "select * from dbo.Employee where employeeID = @employeeID and password = @password;"; 
    var empID = new SqlParameter("employeeID", employeeID); 
    var pass = new SqlParameter("password", password); 
    readEmployeeRecords.Parameters.Add(empID); 
    readEmployeeRecords.Parameters.Add(pass); 

    using (SqlDataReader reader = readEmployeeRecords.ExecuteReader()) { 
     string rec = ""; 

     while (reader.Read()) { 
      rec = reader.GetString(5); 
     } 

     switch (rec) { 
      case "Busboy": 
       BusboyForm bus = new BusboyForm(); 
       bus.Show(); 
       break; 

      case "Waiter": 
       WaiterForm wait = new WaiterForm(); 
       wait.Show(); 
       break; 
     } 
} 
+0

你執行的查詢是什麼?該查詢是否提取了任何記錄? –

+0

'rec'包含'DBNull'還是隻有在賦值爲'GetString'後纔是空字符串?你確定第5個(或第6個如果是零索引)列包含你想要獲取的正確的字符串? –

+2

你的rec將返回datareader中的最後一個值。這是你想要的價值,對吧? – TriV

回答

0

我沒有足夠的代表發表評論,因此答案已經足夠。

根據您提供的代碼,rec在到達switch語句時仍然會包含該值。

案例區分大小寫,是否確定'Busboy'在表中,而不是'BusBoy'?另外,你的表是否在字符串中返回了額外的空格,即'BusBoy '

這聽起來像是擊中了switch語句的default大小寫,因此沒有得到預期的行爲。

+0

同意。所以你認爲他應該在填充** rec **時添加'Trim()'和'ToLower()',然後調整他的'case'語句。 –

+0

謝謝,菲爾。這是默認情況下,它實際上不是空的。 –