1

我正在开发 Web Page 是使用 C# 的视觉工作室,并且我正在将下面的列拉到新作者的集合中。

我不断得到一个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 有关,我只是不知道如何正确地转换它。有什么建议么?

4

2 回答 2

2

如果数据库中的 au_id 类型是 nvarchar,那么这两种枚举转换都将失败(例如,“abc”不能转换为 int)。您可以尝试 int.tryparse ,以防万一失败返回 false 允许您提供一些备用 ID。

于 2013-03-17T16:13:26.133 回答
1

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

contract如果orau_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
于 2013-03-17T15:59:06.180 回答