исключение при получении значения из datareader
От: Аноним  
Дата: 09.07.09 16:51
Оценка:
есть такой код

SqlCommand cmd = ...
SqlDataReader DataReader = cmd.ExecuteReader();
string str = DataReader.GetString(0);

если sql команда возвращает число, то вылетает исключение "не возможно конвертировать int32 в string"
код используется в функции вызываемой из разных мест и возвращаемое из БД значение может быть и строкой и числом, причем результат в конце всегда должен быть конвертирован в строку. можно как то доделать код, чтобы он читал значение любого типа ?
Re: исключение при получении значения из datareader
От: TK Лес кывт.рф
Дата: 09.07.09 16:58
Оценка:
Здравствуйте, Аноним, Вы писали:

А>если sql команда возвращает число, то вылетает исключение "не возможно конвертировать int32 в string"

А>код используется в функции вызываемой из разных мест и возвращаемое из БД значение может быть и строкой и числом, причем результат в конце всегда должен быть конвертирован в строку. можно как то доделать код, чтобы он читал значение любого типа ?

DbDataReader..::.GetValue и потом, объект => в строку
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: исключение при получении значения из datareader
От: nomicon Россия  
Дата: 09.07.09 18:03
Оценка:
Здравствуйте, Аноним, Вы писали:

А>есть такой код


А>SqlCommand cmd = ...

А>SqlDataReader DataReader = cmd.ExecuteReader();
А>string str = DataReader.GetString(0);

А>если sql команда возвращает число, то вылетает исключение "не возможно конвертировать int32 в string"

А>код используется в функции вызываемой из разных мест и возвращаемое из БД значение может быть и строкой и числом, причем результат в конце всегда должен быть конвертирован в строку. можно как то доделать код, чтобы он читал значение любого типа ?

На вскидку:
 DataReader[0].ToString()

или так:
 Convert.ToString(DataReader[0])

Для простых типов работать будет, для сложных возвращать имя типа — необходимо делать так:
 String override ToString()
Re: исключение при получении значения из datareader
От: Аноним  
Дата: 10.07.09 15:24
Оценка:
Здравствуйте, Аноним, Вы писали:

А>есть такой код


А>SqlCommand cmd = ...

А>SqlDataReader DataReader = cmd.ExecuteReader();
string returnedString = Convert.ToString(cmd.ExecuteScalar());
А>string str = DataReader.GetString(0);

В случае когда возвращается одно значение предпочтительнее использовать ExecuteScalar он для того и создавался.

И стоит обратить внимание может ли возвращать исполняемая команда DBNull.value
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.