我正在尝试返回一个由一些元素组成的列表(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;
答案 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;