2017-05-04 1 views
0

SqlDataReader 개체의 값을 switch 문 또는 그와 관련된 문에 전달하는 데 문제가 있습니다. 짧게는 직원 테이블에서 해당 역할을 나타내는 컬럼을 읽는 것입니다. 적절한 도구가 제공되기 위해서는 역할이 무엇인지 알아야합니다. 내가 스위치를 밟을 무렵에, rec는 비어 있습니다.SqlDataReader에서 값 가져 오기 및 스위치 또는 if 문으로 전달

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 번째 열 (또는 인덱스가 0 일 경우 6 번째 열)에 포함 되었습니까? –

+2

'rec'는 datareader의 마지막 값을 반환합니다. 그것은 당신이 원하는 가치입니다, 그렇죠? – TriV

답변

0

내가 코멘트를 게시 할 수있는 충분한 담당자를 가지고 있지 않기 때문에 답변이 충분해야합니다.

제공 한 코드에 따라 rec에는 switch 문에 도달 할 때 값이 계속 포함됩니다.

케이스는 대소 문자를 구분합니다. 'Busboy''BusBoy'이 아닌 테이블에 있습니까? 또한 테이블에서 문자열의 공백을 추가로 반환합니까? 즉 'BusBoy '?

switch 문이 default인데 동작이 예상되지 않는 것처럼 들리는 것 같습니다.

+0

동의. 그래서 ** rec **을 채울 때'Trim()'과'ToLower()'를 추가해야한다고 생각하고 그의 case 문을 조정해야합니다. –

+0

감사합니다. Phil. 그것은 디폴트 케이스를 치고 있었고, 그것은 실제로 비어 있지 않았습니다. –

관련 문제