我正在尝试使用来自MySql数据库的记录填充数据集,然后循环遍历数据集中表的每个记录,创建并填充每个通过循环的自定义数据对象,最后重新调整列表数据对象已创建。
我遇到的问题是我在尝试创建每个数据对象时遇到错误:
错误:
System.InvalidCastException:指定的强制转换无效。
错误突出显示以下代码行:var newsRelease = new NewsRelease
我怀疑两个问题之一: 1)由于MySql DateTime数据类型与C#DateTime数据类型的格式化问题,无法创建对象/ 2)select查询实际上并没有返回任何内容,因此没有任何内容可以使用。
填充NewsRelease对象我已尝试测试这两个问题,但似乎无法确定是否实际上是问题。我非常感谢您对我的问题以及如何解决问题的任何见解。
public List<NewsRelease> SELECT()
{
MySqlConnection connection = new MySqlConnection(ConnectionString);
MySqlCommand cmd = connection.CreateCommand();
cmd.CommandText = "SELECT * FROM NewsReleases";
MySqlDataAdapter adap = new MySqlDataAdapter(cmd);
DataSet ds = new DataSet();
adap.Fill(ds);
List<NewsRelease> NewsReleases = new List<NewsRelease>();
foreach (DataRow row in ds.Tables[0].Rows)
{
var newsRelease = new NewsRelease
{
NewsReleaseId = (int)row["NewsReleaseId"],
Title = (string)row["Title"],
Content = (string)row["Content"],
Images = Convert.ToBoolean((int)row["Images"]),
MediaAdvisory = Convert.ToBoolean((int)row["MediaAdvisory"]),
PublicAdvisory = Convert.ToBoolean((int)row["PublicAdvisory"]),
Time = (DateTime)row["Time"],
DatePublished = (DateTime)row["DatePublished"],
DateCreated = (DateTime)row["DateCreated"],
DateModified = (DateTime)row["DateModified"],
ModifiedBy = (string)row["ModifiedBy"],
HasFrenchVersion = Convert.ToBoolean((int)row["HasFrenchVersion"])
};
NewsReleases.Add(newsRelease);
}
return NewsReleases;
}
答案 0 :(得分:0)
您从基地检索的行中只有一行没有您期望必须具有的类型。
要识别问题并在一致性中解决问题,请逐行初始化newRelease
,这样运行时就会遇到问题发生的完全行。
var newsRelease = new NewsRelease();
newsRelease.NewsReleaseId = (int)row["NewsReleaseId"];
newsRelease. Title = (string)row["Title"];
....
....
如果您愿意,可以确定并解决一次性问题,然后再回到您之前所做的初始化方式。