2017-02-10 6 views
0

私は現在、特定の期間内の従業員の合計をtotalhoursdoubleという形式でデータベースから取得していますが、問題はデータベースをチェックして従業員に遅くなるとreader = nullとなります。だから、私はisDBNullを使用することを決定したが、私はif (!myReader.IsDBNull(myReader.GetDouble("total")))を挿入すると、myReader.Getdouble("total")reader.GetDoubleにはintが必要ですか?

システムがこれはint型

 cc.SetCMD(@"SELECT SUM(AccHours) AS total FROM mia_payroll.tbl_late WHERE COP_ID = @ID AND EID = @EID;"); 
     using (myConn = new MySqlConnection(ConnectionClass.GetConnection())) 
     { 
      myConn.Open(); 
      using (cmDB = new MySqlCommand(cc.GetCMD(), myConn)) 
      { 
       cmDB.Parameters.AddWithValue("@ID", lblCOID.Text); 
       cmDB.Parameters.AddWithValue("@EID", EID); 
       try 
       { 
        using (myReader = cmDB.ExecuteReader()) 
        { 
         while (myReader.Read()) 
         { 
          if (!myReader.IsDBNull(myReader.GetDouble("total"))) 
          { 
           total = myReader.GetDouble("total"); 
          } 
          else 
          { 
           total = 0; 
          } 
          txtLate.Text = System.Convert.ToString(total); 
         } 
        } 
       } 
       catch (Exception ex) 
       { 
        MessageBox.Show(ex.Message); 
       } 
      } 
      myConn.Close(); 
     } 

答えて

1

`にdoubleを変換することができないという引数でエラーが発生し.IsDBNull()想定しているためint DBNULLをチェックする列の順序の位置値。 double値のタイプをmyReader.GetDouble()から渡しています。公式ドキュメント:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.isdbnull(v=vs.110).aspx

だけGetOrdinalに変更します。

if (!myReader.IsDBNull(myReader.GetOrdinal("total"))) 
1

あなたはIsDBNullに列インデックスを渡す必要があります。

!myReader.IsDBNull(myReader.GetDouble("total"))を置き換えます

!myReader.IsDBNull(myReader.GetOrdinal("total")) 
0

データベース内の全フィールドのためのあなたのデータ型は何ですか?フィールドが二重でなければ、二重として解析することはできません。このエラーは、データベース内で時間のフィールドがdoubleではないintであることを明確に示しています。

関連する問題