2016-03-19 2 views
0

Я считаю, что мой вопрос может показаться дилетантским, но моя цель - взять данные DateTime из моей базы данных и сохранить их в локальной переменной. Мой фрагмент кода добавлен ниже:Хранение переменной DateTime в локальной переменной C#

имя
string checkdu1 = "select Top 1 Date from CF"; 
SqlCommand cmdd = new SqlCommand(checkdu1, con); 
SqlDataReader dru1 = cmdd.ExecuteReader(); 
DateTime d1 = Convert.ToDateTime("Date");   //error here 

База данных CF и значение Date колонны должна быть восстановлена. Но я получаю

исключение типа «System.FormatException» произошло в mscorlib.dll, но не был обработан в пользовательском коде

Дополнительная информация: Строка не была признана в качестве действительного DateTime. Существует неизвестное слово, начиная с индекса 0.

Тип данных Date в базе данных DateTime.

Я не могу найти правильный ответ, и ваша помощь будет оценена по достоинству.

+1

Параметр Convert.ToDateTime должен быть значением, которое вы хотите convert – potatopeelings

+0

Показать, что находится в вашей таблице в базе данных –

ответ

2

Вы пытаетесь преобразовать слово «Дата» в дату, которая не будет работать.

Try что-то вроде

DateTime d1 = dru1.GetDateTime(dru1.GetOrdinal("Date")); 
+0

Спасибо! Я пробовал это, и это дает мне InvalidOperationException. –

+0

Не забудьте сделать 'reader.Read()'. В этом случае 'dru1.Read()'. Он возвращает 'bool', поэтому было бы разумно проверить, что это правда, прежде чем пытаться захватить данные. – TyCobb

+0

@TyCobb верен. В качестве альтернативы, если ваш фрагмент кода является репрезентативным для вашего фактического кода (т. Е. Одна строка с одним возвращенным столбцом), вы можете отказаться от всего материала DataReader и просто вызвать 'cmdd.ExecuteScalar' - это вернет первый столбец первого результата , и затем вы можете применить это к DateTime, например 'd1 = Convert.ToDateTime (cmdd.ExecuteScalar());' (при условии, что SQL всегда вернет действительную дату) –

0

Я думаю, что это должно работать DateTime dt = Convert.ToDateTime(dru1["Date"]);

+0

Спасибо за помощь! –

1

Во-первых, вы не используете dru1 для чего-нибудь.

Посмотрите здесь, как использовать читателя SqlDataReader Class

Во-вторых, как ваше поле даты имеет тип данных DateTime , это не имеет никакого смысла, чтобы преобразовать его; это дата.

+0

Спасибо за ваши предложения! –

0

У вас есть два варианта на основе вашего кода образца:

1 Использование DataReader

string checkdu1 = "select Top 1 Date from CF"; 
SqlCommand cmdd = new SqlCommand(checkdu1, con); 
SqlDataReader dru1 = cmdd.ExecuteReader(); 
DateTime d1; 
if(dru1.Read()) d1 = dru1.GetDateTime(0); 

2 Использование ExecuteScalar

string checkdu1 = "select Top 1 Date from CF"; 
SqlCommand cmdd = new SqlCommand(checkdu1, con); 
DateTime d1 = (DateTime) cmdd.ExecuteScalar(); 
+0

Спасибо за помощь :) –

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