指定的转换无效,C#网页

时间:2013-03-17 15:56:27

标签: c# casting

我在网页上工作的是使用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有关,我只是无法弄清楚如何正确地投射它。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

如果db中的au_id类型为nvarchar,则两个枚举转换都将失败(例如“abc”无法转换为int)。你可以尝试int.tryparse,如果失败则返回false,允许你提供一些备用id。

答案 1 :(得分:1)

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

如果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