指定的类型转换对字段int无效

本文关键字:字段 int 无效 类型转换 | 更新日期: 2023-09-27 17:53:16

我一直在ID列的代码上获得"指定的cast是无效的"错误。我试着用

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; }
}

提前干杯

指定的类型转换对字段int无效

尝试使用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()
};

另一种方法是检查我们的类型(例如Watch window):

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; }
}

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

代替

p.Field (" ID ")

row [" ID "]