通过C#从MySql检索时,指定的Cast无效

时间:2012-12-11 15:20:36

标签: c# mysql datetime

我正在尝试使用来自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;
        }

1 个答案:

答案 0 :(得分:0)

您从基地检索的行中只有一行没有您期望必须具有的类型。

要识别问题并在一致性中解决问题,请逐行初始化newRelease,这样运行时就会遇到问题发生的完全行。

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

如果您愿意,可以确定并解决一次性问题,然后再回到您之前所做的初始化方式。