指定的强制转换与 int 字段无效

4
我在代码中的ID列一直收到“指定的转换无效”的错误提示。我尝试使用...
data.Columns.Add("ID", typeof(int));

让程序知道该ID是一个整数。我正在从本地的 .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; }
}

提前祝你好运 :)

3个回答

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

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

而不是使用

p.Field("ID")

do it

row["ID"]


1
另一种方法是检查我们的类型(例如使用监视窗口):
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; }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接