0

我正在尝试使用 MySql 数据库中的记录填充数据集,然后遍历数据集中表的每条记录,创建并填充每个通过循环的自定义数据对象,最后重新调整创建的数据对象列表.

我遇到的问题是在尝试创建每个数据对象时出现错误:

错误:

System.InvalidCastException:指定的强制转换无效。

该错误突出显示了这行代码:var newsRelease = new NewsRelease

我怀疑以下两个问题之一:1)由于 MySql DateTime 数据类型与 C# DateTime 数据类型的格式问题,无法创建对象/ 2)选择查询实际上没有返回任何内容,因此没有任何内容可以填充 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;
        }
4

1 回答 1

0

它只是您从基中检索到的行之一,没有您期望它必须具有的类型。

要识别问题并按顺序解决问题,请逐行初始化newRelease,以便运行时准确找到问题发生的行。

var newsRelease = new NewsRelease(); 
newsRelease.NewsReleaseId = (int)row["NewsReleaseId"];
newsRelease. Title = (string)row["Title"];
....
....

一次发现并解决了问题,如果愿意,您可以回到以前的初始化方式。

于 2012-12-11T15:22:22.417 回答