0

totalhours我目前正在以数据库的格式和从数据库中获取员工在一定时期内的总double迟到,但问题是当我检查数据库时,可以说员工没有一条迟到的记录,这使得reader = null. 所以,我决定使用isDBNull,但是当我插入时if (!myReader.IsDBNull(myReader.GetDouble("total"))),会myReader.Getdouble("total")生成一个带有参数的错误

系统无法转换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();
        }
4

3 回答 3

1

这是因为.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")))
于 2017-02-10T07:36:57.033 回答
1

您需要将列索引传递给IsDBNull

替换!myReader.IsDBNull(myReader.GetDouble("total"))为:

!myReader.IsDBNull(myReader.GetOrdinal("total"))
于 2017-02-10T07:37:55.537 回答
0

数据库中总字段的数据类型是什么?如果您的字段不是双倍,那么您不能将其解析为双倍。该错误清楚地表明,在您的数据库中,小时字段是 int 而不是 double,

于 2017-02-10T07:38:43.167 回答