Обработка метки времени SQL Server CE - PullRequest
0 голосов
/ 01 апреля 2012

Какая разница в форматировании:

DateTime datetimenow = DateTime.Now.ToLocalTime();

и

long ticks = 634687637580000000;
DateTime createdTimestamp = new DateTime(ticks).ToLocalTime();

Что приводит к ошибке SQL Server CE

Произошла ошибкав части формата даты.[Выражение (если известно) =]

Я пытаюсь вставить две метки времени в базу данных SQL Server CE.Текущее время и дата из прошлого.Текущая дата и время (сейчас) могут быть вставлены в оба целевых поля в таблице, однако, когда я использую createdTimestamp, появляется ошибка выше.

Формат, когда я проверяю локальные файлы в отладке, точно одинаков между двумя.

Оба целевых поля имеют тип данных datetime.

Почему может выдаваться эта ошибка?

Редактировать:

Я только что обнаружил, что она влияет только на временные метки в прошлом.Сейчас и в будущем отметки времени работают нормально.

Редактировать: добавление кода для вставки SQL.

Запрос строится динамически моим собственным классом SQL Server CE.

{INSERT timeline (TweetID,Author,TimestampOfTweet,TimestampOfCollected,TweetText) VALUES ('185941815562739713','twitterapi','15/12/2011 13:52:39','01/04/2012 15:58:58','TweetDeck access - Update : This issue has been resolved. http://t.co/2yub0tYL')}

Код исполнения:

//Take built statement and apply to command text
cmd.CommandText = buildSqlStatement.ToString();

//execute insert
try
{
   cmd.Connection = sqlConn;
   sqlConn.Open();
   int rows = cmd.ExecuteNonQuery();
   string results = Convert.ToString(rows);
   return results;
}
catch(Exception ex)
{
   return ex.Message;
}
finally
{
   sqlConn.Close();
}

1 Ответ

3 голосов
/ 01 апреля 2012

Никогда не включайте значения непосредственно в ваш SQL - всегда используйте вместо него параметризованный SQL .

Преимущества:

  • Чистое разделение "кода" (SQL)из данных (значений)
  • Защита от Атаки SQL-инъекций
  • Предотвращает подверженные ошибкам преобразования, такие как в этом вопросе.
...