我在网页上工作的是使用C#的visual studio,我将下面的专栏拉到新作者的集合中。
我一直在Specified Cast Is Not Valid error
。我认为它与我的int“au_id”有关。我的教授给了我们一个数据库,其中id是nvarchar,而不是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
我知道,对于合同来说,这将是一个布尔,我很确定char是字符串。所以我几乎肯定我的错误与id有关,我只是无法弄清楚如何正确地投射它。有什么建议吗?
答案 0 :(得分:2)
如果db中的au_id类型为nvarchar,则两个枚举转换都将失败(例如“abc”无法转换为int)。你可以尝试int.tryparse,如果失败则返回false,允许你提供一些备用id。
答案 1 :(得分:1)
您必须将au_id
列的数据类型更改为整数(或相关数据类型),或者将该值解析为c#中的字符串 Attila Kurucz 建议。
如果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