Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 指定的强制转换对字段int无效_C#_Asp.net Mvc 4_Int - Fatal编程技术网

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

C# 指定的强制转换对字段int无效,c#,asp.net-mvc-4,int,C#,Asp.net Mvc 4,Int,我一直在ID列中的代码上出现“指定的强制转换无效”错误。我试着用 data.Columns.Add("ID", typeof(int)); 为了让它知道ID是一个int。我从本地的.xls文件中获取数据 这是我的密码: foreach (DataRow p in data.Rows) { TopPlayed top = new TopPlayed() {

我一直在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);
                }

提前干杯:)

试着改用
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()
};
TopPlayed top=新的TopPlayed()
{
TrackID=Convert.ToInt32(p.Field(“ID”)),
TrackName=p.Field(“轨迹名称”),
艺人名称=p.Field(“艺人名称”),
时间=p.Field(“NoOfPlays”).ToString()
};

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

打印什么(在我的情况下):
{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; }
}
TopPlayed top=新的TopPlayed()
{
TrackID=p.Field(“ID”),
TrackName=p.Field(“轨迹名称”),
艺人名称=p.Field(“艺人名称”),
时间=p.Field(“NoOfPlays”).ToString()
};
公众阶级被击败
{
public Int64 TrackID{get;set;}
公共字符串TrackName{get;set;}
公共字符串ArtistName{get;set;}
公共字符串时间{get;set;}
}

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

而不是使用

p、 字段(“ID”)

做吧

行[“ID”]

row.Table.Columns["id"].DataType
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; }
}