2017-05-04 7 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番目(ゼロインデックスの場合は6番目)の列に含まれていることを確認してください。 –

+2

'rec'はdatareaderの最後の値を返します。それはあなたが望む価値なのですよね? (SqlCommandオブジェクトreadEmployeeRecords = con.CreateCommand())を使用して – TriV

答えて

0

コメントを投稿するのに十分な担当者がいないため、回答で十分です。

あなたが指定したコードに基づいて、recにはスイッチステートメントに達したときでも値が入ります。

ケースでは大文字と小文字が区別されますが、'Busboy''BusBoy'ではありませんか?また、あなたのテーブルは文字列内の空白を追加しますか?つまり、'BusBoy '

switch文のdefaultケースに当たっているようで、動作が期待できないようです。

+0

合意。だからあなたは** rec **を投入するときに 'Trim()'と 'ToLower()'を追加し、 'case'文を調整する必要があると思います。 –

+0

ありがとう、フィル。デフォルトのケースに当たっていましたが、実際には空ではありませんでした。 –

関連する問題