mandeepchd1 Ответов: 3

Проблема с датой C#не удается вставить дату в SQL server2008


я был кодирования на C# школа программистов небес Фарадж Рашид . сделал все кодирование точно так же, но я постоянно получаю ошибку в этой строке

row ["dateOfPublishing"] = txtDateOfPublishing. Text
datadapter.Обновление (ds, " статья");

невозможно обновить данные, если я ввожу дату как что-то меньшее, чем 12, например 01/01/2000 или 03/05/2000, это работает нормально, но когда я ввожу дату выше 12, она не принимает значения, как 13/05/2001 или 5/13/2001, показывая ошибку, как

13/5/2001 - преобразование не удалось при преобразовании даты и / или времени из символа

05/13/2001 - ' строка не была распознана как допустимая Дата-Время.Не удалось сохранить < 01-21-2007 00: 00:00>В столбце dateOfPublishing. Ожидаемый тип-DateTime.'

Я даже использовал управление выбором даты, но та же ошибка отображается..Много видел в интернете, но не понимаю, как это сделать, мой системный формат даты - ДД/ММ / гггг . я не могу изменить этот формат в соответствии с требованиями пользователя..

Кто-нибудь может помочь, пожалуйста...

Что я уже пробовал:

проверил все кодировки
проверил все функции преобразования
пробовал и с контролем выбора даты и времени..
также изменен тип данных поля SQL server как datetime и datetime2
но нет результата та же ошибка

3 Ответов

Рейтинг:
2

F-ES Sitecore

Что значит "13/05/2001"? Вы можете интерпретировать это как 13-й день 5-го месяца 2001 года. Я мог бы интерпретировать это как 5-й день 13-го месяца 2001 года. Кто-то другой мог бы истолковать это как 2001-й день 5-го месяца 13-го года. В этой строке нет абсолютной информации о дате, поэтому превратить ее в дату означает угадать, что означают цифры. SQL предполагает, что вы имеете в виду 5-й день 13-го месяца, и это неверно. Поэтому вместо того, чтобы использовать формат даты, который компьютер должен угадать, вы должны использовать форматы, которые компьютер не должен угадывать, или использовать однозначный формат SQL по умолчанию.

Прежде всего вам нужно преобразовать ваш текст в DateTime, используя имеющиеся у вас знания о том, какой это на самом деле формат (dd/MM/yyyy), а затем преобразовать этот DateTime в строку нужного формата

string d = "13/05/2001";
DateTime dt;

if (!DateTime.TryParseExact(d, "dd/MM/yyyy", System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None, out dt))
{
    // show error that string is in the wrong format
}

string sqlDate1 = dt.ToString("dd MMM yyyy"); // 13 May 2001
string sqlDate2 = dt.ToString("yyyy-MM-dd"); // 2001-05-13


sqlDate2-это однозначный формат SQL по умолчанию, в то время как sqlDate1-это немного более удобный для человека формат даты, но вы действительно должны использовать sqlDate2.

SQL Server однозначные строки даты - Мэтт Рэндл[^]


Рейтинг:
0

OriginalGriff

Не делай этого так.
Проблема заключается в том, что вы устанавливаете текстовую дату в поле DATE или DATETIME в SQL: поэтому он должен выполнять преобразование при вставке или обновлении строки. И к тому времени он понятия не имеет, какой формат использовал исходный пользователь, когда он ввел дату, поэтому он пытается "угадать" и использует культуру, которую использует компьютер, на котором работает SQL Server, для форматирования информации о дате. Поэтому он ошибается, и вы получаете ошибку.
Вместо этого используйте DateTime.Попробуйте преобразовать строку в значение DateTime в вашем коде (используя культуру пользователя для ее интерпретации) и вставить значение DateTime непосредственно в вашу строку. Таким образом, значение, переданное в SQL, не нуждается в преобразовании и может быть вставлено правильно.


Рейтинг:
0

Richard MacCutchan

Похоже, что ваш код ожидает строки даты в виде MM/DD/YYYY, поэтому вам нужно их нормализовать. Лучшим решением является использование DateTime объект и преобразовать строку, прежде чем пытаться применить его к базе данных.