【问题标题】:Specified cast is not valid with field int指定的强制转换对字段 int 无效
【发布时间】:2014-05-03 07:39:10
【问题描述】:

我在 ID 列中的代码中不断收到“指定的转换无效”错误。我尝试使用

data.Columns.Add("ID", typeof(int));

让它知道 ID 是一个 int。我正在从本地 .xls 文件中获取数据。

这是我的代码:

  foreach (DataRow p in data.Rows)
                {
                    TopPlayed top = new TopPlayed()

                    {
                        TrackID = p.Field<int>("ID"),

                        TrackName = p.Field<string>("Track Name"),
                        ArtistName = p.Field<string>("Artist Name"),
                        Times = p.Field<double>("NoOfPlays").ToString()
                    };

                    data.Columns.Add("ID", typeof(int));

                    daa.Add(top);
                }

这是我的课:

 public class TopPlayed
{
    public int TrackID { get; set; }
    public string TrackName { get; set; }
    public string ArtistName { get; set; }
    public string Times { get; set; }
}

提前干杯:)

【问题讨论】:

    标签: c# asp.net-mvc-4 int


    【解决方案1】:

    尝试改用double。 Excel 将数据公开为字符串或双精度数。

    TopPlayed top = new TopPlayed()
    
    {
        TrackID = Convert.ToInt32(p.Field<double>("ID")),
    
        TrackName = p.Field<string>("Track Name"),
        ArtistName = p.Field<string>("Artist Name"),
        Times = p.Field<double>("NoOfPlays").ToString()
    };
    

    【讨论】:

      【解决方案2】:

      另一种方法是检查我们的类型(例如使用 Watch 窗口):

      row.Table.Columns["id"].DataType
      

      什么打印(在我的情况下):{Name = "Int64" FullName = "System.Int64"},然后将您的代码更改为正确的类型:

      TopPlayed top = new TopPlayed()    
      {
          TrackID = p.Field<Int64>("ID"),
          TrackName = p.Field<string>("Track Name"),
          ArtistName = p.Field<string>("Artist Name"),
          Times = p.Field<double>("NoOfPlays").ToString()
      };
      
      public class TopPlayed
      {
          public Int64 TrackID { get; set; }
          public string TrackName { get; set; }
          public string ArtistName { get; set; }
          public string Times { get; set; }
      }
      

      【讨论】:

        【解决方案3】:

        如果是查询中的查询,最好的方法是提交一个简单的字符串 然后将其转换为 int32 ex.:

        而不是使用

        p.Field("ID")

        去做

        行[“ID”]

        【讨论】:

          猜你喜欢
          • 2022-06-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-27
          • 2014-07-30
          • 2012-06-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多