消息错误”;指定的强制转换无效”;
本文关键字:转换 无效 错误 消息 | 更新日期: 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
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_TEL
和MOBILE
列中的double
编号。
此外,在读取之前,请检查非string
列的DbNull
值。long
、int
、double
、DateTime
不能为空。