找不到指定的强制转换

时间:2013-12-22 19:24:10

标签: c# sql ms-access

我正在尝试返回一个由一些元素组成的列表(sql查询),但调试器在director.oscars行停止。

我将oscars声明为私有int,数据库中的数据都是正确的。

如果我省略那一行,则不再有错误,并返回一个列表,整个oscars列为0。

  public static List<Director> AllDirectors()
    {
        string command;
        command = "SELECT directorId, firstName, lastName, birthdate, gender, oscars " +
            " FROM directors order by directorId";
        OleDbDataAdapter adapter = new OleDbDataAdapter(command, connectionString);
        DataTable datatable = new DataTable();
        adapter.Fill(datatable);


        List<Director> list = new List<Director>();
        for (int i = 0; i < datatable.Rows.Count; i++)
        {
            Director director= new Director();
            director.directorId = datatable.Rows[i].Field<int>("directorId");
            director.firstName = datatable.Rows[i].Field<string>("firstName");
            director.lastName= datatable.Rows[i].Field<string>("lastName");
            director.oscars = datatable.Rows[i].Field<int>("oscars");
            director.birthdate = datatable.Rows[i].Field<DateTime>("birthdate");
            director.gender = datatable.Rows[i].Field<string>("gender");




            list.Add(Director);
        }
        return list;

1 个答案:

答案 0 :(得分:3)

无效投射异常的最可能原因是数据库中的oscars字段 int

检查字段的确切类型,并使用正确的类型替换int中的datatable.Rows[i].Field<int>("oscars")。例如,如果该字段是可以为空的整数,则需要使用datatable.Rows[i].Field<int?>("oscars");(带问号)。

注意:如果Director.oscars不可为空,但数据库字段为,则使用??将空值替换为零,如下所示:

director.oscars = datatable.Rows[i].Field<int?>("oscars") ?? 0;