【发布时间】:2015-01-30 06:37:13
【问题描述】:
我以前没有遇到过这种情况,但是出现这种情况的情况我经历过很多次。
比如我有这个方法:
mySqlCommand = mySqlConnect.CreateCommand();
mySqlCommand.CommandText = "SELECT EquipmentNumber, EquipmentType, P.AreaCode AS Location, EquipmentDsc FROM MajorEquipment ME"
+ " INNER JOIN PlantAreaCodes P ON ME.PACId = P.PACId WHERE"
+ "(@EquipNumber IS NULL OR EquipmentNumber LIKE @EquipNumber)"
+ " AND ((SELECT PACId FROM PlantAreaCodes WHERE AreaCode = @Location) IS NULL OR ME.PACId = (SELECT PACId FROM PlantAreaCodes WHERE AreaCode = @Location))"
+ " AND (@EquipType IS NULL OR EquipmentType LIKE @EquipType)"
+ " AND (@Comments IS NULL OR EquipmentDsc LIKE @Comments);";
mySqlCommand.Parameters.Add("@EquipNumber", MySqlDbType.VarChar);
mySqlCommand.Parameters.Add("@Location", MySqlDbType.VarChar);
mySqlCommand.Parameters.Add("@EquipType", MySqlDbType.VarChar);
mySqlCommand.Parameters.Add("@Comments", MySqlDbType.VarChar);
mySqlCommand.Parameters["@EquipNumber"].Value = MeModel.EquipmentNumber;
mySqlCommand.Parameters["@Location"].Value = MeModel.Location;
mySqlCommand.Parameters["@EquipType"].Value = MeModel.EquipmentType;
mySqlCommand.Parameters["@Comments"].Value = MeModel.Notes;
mySqlReader = mySqlCommand.ExecuteReader();
MajorEquipment_Controller.MeList = new List<MajorEquipment_Model>();
while (mySqlReader.Read())
{
Console.WriteLine(mySqlReader["EquipmentDsc"].GetType());
MajorEquipment_Controller.MeList.Add(new MajorEquipment_Model
{
EquipmentNumber = Convert.ToString(mySqlReader["EquipmentNumber"]),
EquipmentType = Convert.ToString(mySqlReader["EquipmentType"]),
Location = Convert.ToString(mySqlReader["Location"]),
Notes = Convert.ToString(mySqlReader["EquipmentDsc"])
});
}
mySqlReader.Close();
mySqlCommand.ExecuteNonQuery();
在这个方法中,EquipmentDscallows 是System.DBNull,但是我之前从来没有遇到过问题。
但是,在一个单独的程序中,我有一个类似的方法:
mySqlCommand = mySqlConnect.CreateCommand();
mySqlCommand.CommandText = "SELECT * FROM IT_Requests;";
mySqlReader = mySqlCommand.ExecuteReader();
IT_Admin.Admin_Controller.List = new List<IT_Admin.Admin_Model>();
while (mySqlReader.Read())
{
MessageBox.Show((mySqlReader["Name"].GetType()).ToString());
IT_Admin.Admin_Controller.List.Add(new IT_Admin.Admin_Model
{
ReqID = Convert.ToInt32(mySqlReader["ReqID"]),
Issue = Convert.ToString(mySqlReader["Issue"]),
PC = Convert.ToString(mySqlReader["PC"]),
Date = Convert.ToString(mySqlReader["ReqDate"]),
Name = Convert.ToString(mySqlReader["Name"]),
ReqType = Convert.ToString(mySqlReader["ReqType"]),
Urgency = Convert.ToInt32(mySqlReader["Urgency"]),
Description = Convert.ToString(mySqlReader["Description"]),
PrevReport = Convert.ToBoolean(mySqlReader["PrevReport"]),
Completed = Convert.ToBoolean(mySqlReader["Completed"]),
Resolution = Convert.ToString(mySqlReader["Resolution"]),
ResDate = Convert.ToString(mySqlReader["ResDate"])
});
}
一旦达到空值,它就会吐出“InvalidCastException”错误。
有人知道是什么原因造成的吗?
【问题讨论】: