消息错误”;指定的强制转换无效”;

本文关键字:转换 无效 错误 消息 | 更新日期: 2023-09-27 18:27:46

我正试图用这种方法从数据库访问中获取信息

public List<gerant> getinfogerant()
    {
        List<gerant> gerer = new List<gerant>();
        string sql_gerant = "select CIN,NOM,PRENOM,ADRESS_PERSONNEL,NUM_TEL,MAIL,MOBILE,CP_GERANT,VILLE_GERANT,DATE_CIN from GERANT";
        connexion connect = new connexion();
        OleDbConnection connection = connect.getconnexion();
        connection.Open();
        OleDbCommand cmd = new OleDbCommand(sql_gerant, connection);
        OleDbDataReader reader = cmd.ExecuteReader();
       while(reader.Read())
        {
            gerer.Add(new gerant(reader.GetInt64(0),
                reader.GetString(1),
                reader.GetString(2),
                reader.GetString(3),
            reader.GetDouble(4),
                reader.GetString(5),
                reader.GetDouble(6),
                reader.GetInt32(7),
                reader.GetString(8),
                reader.GetDateTime(9))
                );
        }
        connection.Close();
        return gerer;
    }

在我的数据库访问中,我将字段cin定义为长整数,并格式化为"00000000"

但我在reader.GetInt64(0):中遇到了一个错误

指定的强制转换不是有效的

我该如何解决?

消息错误”;指定的强制转换无效”;

试试这个代码

public List<gerant> getinfogerant()
{
    List<gerant> gerer = new List<gerant>();
    try
    {
        connexion connect = new connexion();
        OleDbCommand cmd = new OleDbCommand();
        cmd.Connection = new OleDbConnection(connect.getconnexion());
        cmd.CommandType = CommandType.Text;
        comd.CommandText = "select CIN,NOM,PRENOM,ADRESS_PERSONNEL,NUM_TEL,MAIL,MOBILE,CP_GERANT,VILLE_GERANT,DATE_CIN from GERANT";
        connection.Open();
        OleDbDataReader reader = cmd.ExecuteReader();
        while(reader.Read())
        {
            gerant g = new gerant();
            if (!reader.IsDBNull(0)) g.CIN = int.Parse(reader.GetValue(0).ToString());
            if (!reader.IsDBNull(1)) g.NOM = reader.GetValue(1).ToString();
            if (!reader.IsDBNull(2)) g.PRENOM = reader.GetValue(2).ToString();
            if (!reader.IsDBNull(3)) g.ADRESS_PERSONNEL = reader.GetValue(3).ToString();
            if (!reader.IsDBNull(4)) g.NUM_TEL = Convert.ToDouble(reader.GetValue(4).ToString());
            if (!reader.IsDBNull(5)) g.MAIL = reader.GetValue(5).ToString();
            if (!reader.IsDBNull(6)) g.MOBILE =Convert.ToDouble(reader.GetValue(6).ToString());
            if (!reader.IsDBNull(7)) g.CP_GERANT = int.Parse(reader.GetValue(7).ToString());
            if (!reader.IsDBNull(8)) g.VILLE_GERANT = reader.GetValue(8).ToString();
            if (!reader.IsDBNull(9)) g.DATE_CIN = Convert.ToDateTime(reader.GetValue(9).ToString());
            gerer.add(g);
        }
        return gerer;
    }
    catch(Exception ex)
    {
        throw ex;
    }
    finally
    {
        reader.Close();
        connection.Close();
    }
}

请调整类和方法的名称:-public List getinfogerant()->public List getinfogerant()

  • 连接=新连接();->连接(非x)

请检查DBNULL值,可能是您得到了一个null值。

问候Jasbeer Singh

Access中的整数有1、2和4个字节。单字节数被命名为byte(范围0-255),双字节数被称为Integer(-32768到32767),然后是Long Integer(-20亿到20亿)。

https://eggerapps.at/mdbviewer/docs/en/field-types.html使用getint32

我想,您得到的异常不是在reader.GetInt64(0)中,而是在gerant构造函数中,所以它可以是任何列。

要检查此项,请按照以下修改您的代码

        while (reader.Read())
        {
            var cin = reader.GetInt64(0);
            var nom = reader.GetString(1);
            var prenom = reader.GetString(2);
            var addressPersonel = reader.GetString(3);
            var numTel = reader.GetDouble(4);
            var mail = reader.GetString(5);
            var mobile = reader.GetDouble(6);
            var cpGerant = reader.GetInt32(7);
            var villeGerant = reader.GetString(8);
            var dateCin = reader.GetDateTime(9);
            gerer.Add(new gerant(cin,
                nom,
                prenom,
                addressPersonel,
                numTel,
                mail,
                mobile,
                cpGerant,
                villeGerant,
                dateCin)
                );
        }

在现实生活中你会遇到例外。

我建议检查NUM_TELMOBILE列中的double编号。

此外,在读取之前,请检查非string列的DbNull值。longintdoubleDateTime不能为空。