指定的类型转换无效,c#网页

本文关键字:网页 无效 类型转换 | 更新日期: 2023-09-27 18:04:14

我正在使用c#开发Web Page is visual studio,并且我正在将下面的列拉到新作者的集合中。

我一直得到一个Specified Cast Is Not Valid error。我认为这与我的int "au_id有关。"我的教授给了我们一个数据库,其中id是nvarchar型,而不是int型,所以我需要将它转换成int型。下面是代码:

colauthors.Add(new authors(
     (int)reader["au_id"],
     (string)reader["au_lname"],
     (string)reader["au_fname"],
     (string)reader["phone"],
     (string)reader["address"],
     (string)reader["city"],
     (string)reader["state"],
     (string)reader["zip"],
     (bool)reader["contract"]));

列在数据库中的数据类型如下:

au_id nvarchar(50) 
au_lname nvarchar (50) 
au_fname nvarchar (50) 
phone char (12) 
address nvarchar (50) 
city nvarchar (50) 
state char (2) 
zip char (5) 
contract bit

我知道对于契约,位将是bool,我很确定char是字符串。所以我几乎肯定我的错误与id有关,我只是不知道如何正确地转换它。有什么建议吗?

指定的类型转换无效,c#网页

如果au_id类型在数据库中是nvarchar,那么它将失败的两个枚举转换(例如:"abc"不能转换为int)。你可以试一下。Tryparse在失败的情况下返回false,允许您提供一些替代id。

您必须将au_id列的数据类型更改为整数(或相关数据类型),或者像Attila Kurucz建议的那样将该值解析为c#中的字符串。

如果contractau_id列是null,也可能有问题。试试这个

(int)!reader.IsDbNull(reader.GetOrdinal("au_id")) && reader["au_id"]
...
(bool)!reader.IsDbNull(reader.GetOrdinal("contract")) && reader["contract"]

或这个(尽管它需要您稍微调整您的authors类)。

(int?)reader["au_id"]
...
(bool?)reader["contract"]

若要指定列为null时的默认值,请执行以下命令。

((int?)reader["au_id"]) ?? 0
...
((bool?)reader["contract"]) ?? false