2013-03-17 3 views
1

Я работаю на веб-странице - это визуальная студия с использованием C#, и я вытаскиваю столбцы ниже в коллекцию новых авторов.Указанный ролик не действителен, веб-страница C#

Я продолжаю получать Specified Cast Is Not Valid error. Я думаю, что это связано с моим «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 

Я знаю, что для контракта бит будет BOOL, и я m уверен, что char - это строки. Поэтому я почти уверен, что моя ошибка связана с идентификатором, я просто не могу понять, как правильно его использовать. Какие-либо предложения?

ответ

2

Если тип au_id является NVARCHAR в БДЕ, то она не будет выполнена для обоего перечисленных преобразований (напр. «А» не может быть преобразован в целом). Вы можете попробовать int.tryparse, в случае неудачи возвращает false, позволяя вам предоставить альтернативный идентификатор.

+0

+1 вы правы, я изначально неправильно понял описание схемы таблицы –

+0

Большое вам спасибо! – newbie1

1

Вы должны изменить тип данных в столбце au_id в целое число (или связанных с типом данных), либо разобрать значение в виде строки в C#, как Аттила 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 
+0

Благодарим за отзыв! Я, наконец, получил его для отображения, когда я прокомментировал строку (int) reader ["au_id"], поэтому я знаю, что ошибка есть. – newbie1

+0

Да, первое, что вы предложили, это то, что мне нужно! Спасибо огромное! – newbie1

+0

Я использовал первые строки для au_id и контракта, но теперь я получаю сообщение об ошибке: «System.Data.SqlClient.SqlDataReader» не содержит определения для «IsDbNull» и никакого метода расширения «IsDbNull», принимающего первый аргумент можно найти тип «System.Data.SqlClient.SqlDataReader» (вам не хватает директивы using или ссылки на сборку?). – newbie1

Смежные вопросы