reader.GetDouble 需要整数?
reader.GetDouble needs int?
我目前正在从数据库中以 totalhours
和 double
的格式获取员工在特定时期内的总延迟,但问题是当我检查数据库并让我们说该员工没有任何迟到记录,这使得 reader = null
。所以,我决定使用 isDBNull
,但是当我插入 if (!myReader.IsDBNull(myReader.GetDouble("total")))
时,myReader.Getdouble("total")
会生成一个错误,参数是
system cannot convert double
to `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();
}
这是因为 .IsDBNull()
需要您要检查 DBNULL 的列的 int
序号位置值。您正在传递来自 myReader.GetDouble()
的 double
值类型。官方文档:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.isdbnull(v=vs.110).aspx
只需更改为GetOrdinal
:
if (!myReader.IsDBNull(myReader.GetOrdinal("total")))
您需要将列索引传递给 IsDBNull。
将!myReader.IsDBNull(myReader.GetDouble("total"))
替换为:
!myReader.IsDBNull(myReader.GetOrdinal("total"))
数据库中总计字段的数据类型是什么?如果您的字段不是双精度,那么您不能将其解析为双精度。该错误清楚地表明,在您的数据库中,小时字段是一个 int 而不是 double,
我目前正在从数据库中以 totalhours
和 double
的格式获取员工在特定时期内的总延迟,但问题是当我检查数据库并让我们说该员工没有任何迟到记录,这使得 reader = null
。所以,我决定使用 isDBNull
,但是当我插入 if (!myReader.IsDBNull(myReader.GetDouble("total")))
时,myReader.Getdouble("total")
会生成一个错误,参数是
system cannot convert
double
to `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();
}
这是因为 .IsDBNull()
需要您要检查 DBNULL 的列的 int
序号位置值。您正在传递来自 myReader.GetDouble()
的 double
值类型。官方文档:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.isdbnull(v=vs.110).aspx
只需更改为GetOrdinal
:
if (!myReader.IsDBNull(myReader.GetOrdinal("total")))
您需要将列索引传递给 IsDBNull。
将!myReader.IsDBNull(myReader.GetDouble("total"))
替换为:
!myReader.IsDBNull(myReader.GetOrdinal("total"))
数据库中总计字段的数据类型是什么?如果您的字段不是双精度,那么您不能将其解析为双精度。该错误清楚地表明,在您的数据库中,小时字段是一个 int 而不是 double,