指定的类型转换无效,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有关,我只是不知道如何正确地转换它。有什么建议吗?
如果au_id类型在数据库中是nvarchar,那么它将失败的两个枚举转换(例如:"abc"不能转换为int)。你可以试一下。Tryparse在失败的情况下返回false,允许您提供一些替代id。
您必须将au_id
列的数据类型更改为整数(或相关数据类型),或者像Attila Kurucz建议的那样将该值解析为c#中的字符串。
如果contract
或au_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