Tom G/mariam Ответов: 1

Строка не была распознана как допустимая дата и время


привет каждому телу, я написал DateTime d = DateTime.Теперь; в visual studio 2012, но он возвращает 2017-11-22 14:14:14 нм. и генерирует ошибку.
строка не была распознана как допустимая дата-время.
Я использую окно 10 с форматом даты и времени
как и ФФ.
короткая дата=M/d/yyy
длинная дата=дддд,мммм д, гггг
короткое время =h:mm tt
долгое время=h:mm:ss tt.

могу я получить помощь, пожалуйста?

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

DateTime d = DateTime.Now; 

phil.o

Вы говорите о строке, но все, что вы показываете, - это код, создающий значение DateTime. Лучше покажите ту часть, где вы пытаетесь получить дату-время из строки.

Tom G/mariam

привет, Фил.
вот мой код, который генерирует ошибку. ошибка преобразования при преобразовании даты и / или времени из строки caracter

Tom G/mariam

DateTime _date =конвертировать.Объект Todatetime( Типа Datetime.Сейчас);

Sqlcommand, который команда2 = новая команда sqlcommand("Select дата,acno,machinenumber,модифицированных с CHECKINCHECKOUT где acno = '" + sdwEnrollNumber + " и изменен = 0 и machinenumber = '" + iMachineNumber + " и дата = '" +преобразование.ToDateTime( _date) + "' ", con);
против.Открыть();
Класс sqldatareader reader2 и = команда2.Метода executereader();


пока (reader2 и.Читать())
{

мовос = истина;
}



reader2 и.Рядом();
против.Закрывать();

F-ES Sitecore

Вам нужно использовать явные недвусмысленные форматы дат. SQL всегда понимает формат гггг-ММ-ДД, поэтому используйте его или используйте dd MMM yyyy. Это означает использование кода типа

и дата = '" + _date.ToString("гггг-ММ-ДД") + "' ...

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

Это лишь некоторые из проблем с вашим существующим кодом, но это только для информационных целей, вы должны использовать параметризованные запросы, как это предлагается ниже, и это будет обрабатывать многие из этих проблем для вас.

1 Ответов

Рейтинг:
7

phil.o

DateTime.Now уже дает вам действительное значение DateTime. Почему ты пытаешься обратить его дважды?

Кроме того, вы не должны создавать SQL-запросы путем объединения строк, как вы это делаете; вместо этого вы должны использовать параметризованные запросы.
Защитите свои данные: предотвратите SQL-инъекцию[^]

Наконец, поля datetime в базе данных должны иметь тип datetime, а не тип string (или varchar/nvarchar). То, как вы написали свой запрос (заключив значение DateTime между одинарными кавычками), заставляет меня думать, что вы храните datetimes в виде строк, что является плохой практикой.

Ты можешь попробовать:

DateTime _date = DateTime.Now;

// Replace your string concatenations with proper SQL parameters specifications
SqlCommand command2 = new SqlCommand("SELECT date, acno, machinenumber, modified FROM CHECKINCHECKOUT WHERE acno = @sdwEnrollNumber AND modified = 0 AND machinenumber = @iMachineNumber AND date = @_date", con);

// Add required parameters to your command, along with their respective values
command2.Parameters.AddWithValue("@sdwEnrollNumber", sdwEnrollNumber);
command2.Parameters.AddWithValue("@iMachineNumber", iMachineNumber);
command2.Parameters.AddWithValue("@_date", _date);

// Finally open the connection and perform the query
con.Open();
SqlDataReader reader2 = command2.ExecuteReader();
// ...
reader2.Close();
con.Close();

Надеюсь, это поможет. Любезно.

Редактировать:
Пытаясь исправить проблему с форматом, вы можете попробовать:
string formattedDateTime = _date.ToString("yyyy-MM-dd hh:mm:ss");


Tom G/mariam

Я трайду этот код. но не решен. когда я отслеживаю значение _date, оно показывает мне
2017-11-22 14:14:14 нм. что значит "Нм"? Мне нужно только 2017-11-22 14:14:14. он отлично работает на одном компьютере, но генерирует на другом компьютере. ths показывает мне, что проблема заключается в настройке формата даты. любое исцеление пожалуйста

phil.o

Если формат datetime корректен на одном компьютере, а не на другом, то я подозреваю, что проблема заключается во втором компьютере, а не в коде. Я искал nm о датах и часовых поясах, и единственным результатом, который я нашел, был код часового пояса для Нью-Мексико. Я понятия не имею о значении этого суффикса nm.
Может быть, это определитель времени для Амхарской, Оромской или Тигринской культуры?
Пожалуйста, смотрите мой отредактированный ответ на попытку отображения даты-времени в нормализованном формате.

Tom G/mariam

большое спасибо, Фил, что ты решил эту проблему. когда я использую ваш код
_date датавремя = Датавремя.Сейчас;

// Заменить сцепление при правильной спецификации параметров SQL
Sqlcommand, который команда2 = новая команда sqlcommand("Select дата, acno, machinenumber, модифицированных с CHECKINCHECKOUT где acno = @sdwEnrollNumber и изменен = 0 и machinenumber = @iMachineNumber и дата = @_date", кон);

// Добавьте необходимые параметры в вашу команду вместе с их соответствующими значениями
command2.параметры.AddWithValue ("@sdwEnrollNumber", sdwEnrollNumber);
command2.параметры.AddWithValue ("@iMachineNumber", iMachineNumber);
command2.параметры.AddWithValue("@_date", _date);

// Наконец откройте соединение и выполните запрос
кон.Открыть();
Класс sqldatareader reader2 и = команда2.Метода executereader();
// ...
reader2 и.Рядом();
кон.Рядом();

...- действительно танк ты

Tom G/mariam

Привет, Фил.о, у меня есть datatable с именем shifttable. Я хочу узнать строки, передавая параметры datetime, но он генерирует ту же ошибку, что и раньше, то есть преобразование не удалось . что мне нужно, так это как передать параметр для datatable. могу ли я помочь вратам, пожалуйста?
вот мой код
Периода датавремя= Датавремя.сейчас
DataRow[] found = shifttable.Выберите("EMPLOYEEID ='" + empid.ToString() + "' и STARTDATE<='" + daterange + "' и ENDDATE>='" + daterange + "'");

phil.o

Опять же, не создавайте подобные SQL - запросы путем объединения строковых полей; используйте параметризованный запрос как я тебе и показывал. Это позволит прояснить многие вопросы.

Tom G/mariam

я-я, сэр, могу ли я получить пример кода, как передавать параметры для таблицы данных и получать строки по этим критериям? Заранее спасибо.

phil.o

Я уже приводил вам пример из кода в вашем вопросе.
Пожалуйста откройте новый вопрос для этого конкретного вопроса. Есть что сказать о вашем втором примере кода, но это не удобно делать в комментариях к уже ответившему вопросу.

Tom G/mariam

Привет всем, у меня есть datatable с именем shifttable. Я хочу узнать строки, передавая параметры datetime, но он генерирует ту же ошибку, что и раньше, то есть преобразование не удалось . что мне нужно, так это как передать параметр для datatable. могу ли я помочь вратам, пожалуйста?
вот мой код
Периода датавремя= Датавремя.сейчас
DataRow[] found = shifttable.Выберите("EMPLOYEEID ='" + empid.ToString() + "' и STARTDATE<='" + daterange + "' и ENDDATE>='" + daterange + "'");