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

时间:2014-03-25 12:41:56

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

我一直得到"指定演员阵容无效" ID列中的代码出错。我尝试使用

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

让它知道ID是一个i​​nt。我从本地.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 个答案:

答案 0 :(得分: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()
};

答案 1 :(得分:1)

另一种方法是检查我们的类型(例如,使用 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; }
}

答案 2 :(得分:1)

如果这是查询中的查询,则最好的工作方式是提交一个简单的String 然后将其转换为int32 ex。:

代替使用

  

p.Field(“ ID”)

执行

  

行[“ ID”]