2017-02-10 5 views
0

В настоящее время я получаю итоговые резюме сотрудника в течение определенного периода в формате totalhours и double из базы данных, но проблема в том, когда я проверяю базу данных и могу сказать, что у сотрудника нет одной записи поздно, что составляет reader = null. Итак, я решил использовать isDBNull, но когда я вставить if (!myReader.IsDBNull(myReader.GetDouble("total"))), то myReader.Getdouble("total") генерирует ошибку с аргументом, что системаreader.GetDouble нуждается в int?

не может преобразовать double в `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

Это потому, что .IsDBNull() предпологает a 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

что ваш тип данных для общего поля в базе данных? если ваше поле не двойное, вы не можете разобрать его как двойное. Ошибка ясно показывает, что в вашей базе данных поле часами является int не double,

Смежные вопросы