2016-02-29 4 views
1

Я читаю данные из MySQL, одно поле - это поле datetime в MySQL.Преобразование MySQL datetime в строку

я хочу, чтобы получить значение в переменной и преобразовать в строку, так что я могу получить только первые 10 символов:

Dim cdr_date As String = reader.GetString(0) 

cdr_date = cdr_date.Substring(0, 10) 

, но это показывает ошибку в vb.net говоря не в состоянии преобразовать DateTime к системе DateTime

ив также попытался это, но получить ту же ошибку:

Dim cdr_date As DateTime = reader.GetDateTime(0).ToString() 
cdr_date = cdr_date.Substring(0, 10) 


Dim cdr_date As DateTime = reader.GetString(0).ToString() 
cdr_date = cdr_date.Substring(0, 10) 
+0

, что вы имеете в виду, только первые 10 символов? Вы пытаетесь отделить Время? Если переменной DateTime, лучше всего оставить ее как DateTime. Он не будет действовать, как DateTime, когда в строке – Plutonix

+0

мое поле MySQL является 'Date', но при запуске запроса select в vb.net по какой-то причине отображается как' DateTime', так как он вернет дату, а затем '00:00 : 00', так что я просто пытаюсь получить дату, но ее прекрасное получение ее как строки. после его выбора больше не нужно быть 'Date' – charlie

+0

да, я могу сделать, почему? – charlie

ответ

1

Вы не можете просто набить один тип данных в переменную другого без convertin г. Часть кода не будет компилировать под Option Strict, потому что он пытается сделать именно это:

Dim cdr_date As DateTime = reader.GetDateTime(0).ToString() 

Это звучит, как вы пытаетесь раздеть время от дб вар, поэтому получить его в качестве DateTime тогда, если вы должны использовать его как строку где-то преобразовать его:

Dim myDT As DateTime 
rdr.Read() 

' these do the same thing - get it as date: 
myDT = Convert.ToDateTime(rdr("zDateTime")) 
myDT = rdr.GetDateTime(0) 

Задан всегда будет иметь дату и время. Чтобы игнорировать Время, используйте что-то вроде "MM/dd/yyyy", чтобы игнорировать его либо при его отображении, либо преобразовании в строку. SubString и магическое число 10 не требуется.

TextBox13.Text = myDT.ToString("MM/dd/yyyy") 

Или сохранить в строковой переменной:

Dim notADate As String 
' from a DB Reader: 
notADate = rdr.GetDateTime(0).ToString("MM/dd/yyyy") 
' in general: 
notADate = myDT.ToString("MM/dd/yyyy") 

Однако это: unable to convert datetime to system datetime показывает что-то еще неправильно. Объект поставщика DB, по-видимому, не может преобразовать данные db в NET DateTime Type. Наиболее вероятная причина - плохие данные.

Вместо NULL, MySQL может быть сказано, чтобы сохранить 01/01/0001 00:00:00 как «нулевой даты» Для этого, вам может понадобиться изменить строку подключения для добавления этого:.

"server=....;convertzerodatetime=True;allowzerodatetime=True" 

Они позволяют сохранять и преобразование в противном случае недействительными DateTime. AllowZeroDateTime, в частности, вернет нулевое время, а не исключение. В этом случае (разрешено в комментариях), поскольку возврат был нулевой датой, но не то, что видно в БД, удаляя его и создавая новая строка разрешила его.

Есть много, много o Ther опции для подключения MySQL:

MySQL ConnectionString options

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