Значение поля даты изменяется после сохранения данных в базу данных [дубликат]

Буквально самый простой способ исправить NullReferenceExeption имеет два пути. Если у вас есть GameObject, например, с прикрепленным скриптом и переменной с именем rb (rigidbody), эта переменная начнет пустую, когда вы начнете игру. Вот почему вы получаете NullReferenceExeption, потому что на компьютере нет данных, хранящихся в этой переменной.

В качестве примера я буду использовать переменную RigidBody. Мы можем добавить данные действительно легко на самом деле несколькими способами:

  1. Добавить RigidBody к вашему объекту с помощью AddComponent> Физика> Rigidbody Затем зайдите в свой скрипт и введите rb = GetComponent<Rigidbody>();. Эта строка кода работает лучше всего под ваши функции Start() или Awake().
  2. Вы можете добавить компонент программно и назначить переменную одновременно с одной строкой кода: rb = AddComponent<RigidBody>();

Дальнейшие заметки: если вы хотите, чтобы единство добавлялось компонент для вашего объекта, и вы, возможно, забыли добавить его, вы можете ввести [RequireComponent(typeof(RigidBody))] над объявлением класса (пробел ниже всех ваших приложений). Наслаждайтесь и получайте удовольствие от игр!

7
задан andy 3 June 2009 в 23:59
поделиться

7 ответов

Формат YYYY-MM-DD недвусмыслен, что означает, что SQL Server не будет путать месяц и день при преобразовании строкового значения в DATETIME. (Я никогда не испытывал проблемы с неявным преобразованием, используя этот формат, используя четырехзначный год.)

«Самый безопасный» (и наиболее удобный) способ хранения значений даты в SQL Server - использовать DATETIME datatype.

Используйте функцию CONVERT для явного указания форматов ввода и вывода при преобразовании между DATETIME и строками.

Документация по SQL Server 2005 в стиле CONVERT :

http://msdn.microsoft.com/en-us/library/ms187928 (SQL.90) .aspx

Чтобы преобразовать строковое представление в datatype DATETIME:

select CONVERT(datetime, '2009-06-03', 20)

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

( style 20 is ODBC Канонический формат = 'YYYY-MM-DD HH:MI:SS' (24-часовой режим)


[FOLLOWUP]

Чтобы преобразовать выражение DATETIME (например, getdate () в VARCHAR в формате 'YYYY-MM-DD':

select CONVERT(varchar(10), getdate(), 20)

Обратите внимание, что указание varchar (10) дает вам только первые 10 ch (f15)

[/ FOLLOWUP]


Что касается форматов по умолчанию, это будет исследование. Мы избегаем проблем, вызванных форматами по умолчанию, определяя форматы.

9
ответ дан spencer7593 25 August 2018 в 21:01
поделиться
  • 1
    эй Спенсер, спасибо за информацию. Когда вы выполняете SELECT в поле datetime, как мне преобразовать его обратно в строку в универсальном формате (yyyy-mm-dd)? – andy 4 June 2009 в 00:28
  • 2
    @andy: ответ обновляется, чтобы ответить на следующий вопрос. (Я прошу прощения за неполноту ответа ... Я просто даю вам выражения SQL для преобразования. (У меня нет хорошего ответа обо всем, что влияет на форматы по умолчанию для региона / региона. (I «Мне нужен мой парень, мне нравятся мои строки даты canonical CCYYMMDDH24HMISS, поэтому я могу их сортировать. Любой формат, который не имеет века и года, и я использую аббревиатуру трех букв за месяц, например, 03-JUN-2009. AVOIDS AMBIGUITY. – spencer7593 4 June 2009 в 02:21
  • 3
    Формат YYYY-MM-DD является рекомендацией ISO-8601 и ВСЕГДА будет работать на SQL Server независимо от ваших настроек даты или языковой системы. ИСПОЛЬЗУЙ ЭТО! :-) Вы всегда можете преобразовать из этого универсального формата в любое локализованное представление, которое вам нужно. – marc_s 4 June 2009 в 06:08
  • 4
    @spencer: Ха-ха, да нет необходимости извиняться, спасибо за вашу помощь. Только что вернулся из исправления устаревшего приложения .... обработка дат была довольно мрачной, как и код ... – andy 4 June 2009 в 08:40
  • 5
    @ spencer7593 Этот формат не однозначен, поэтому я согласен с вашим советом всегда указывать формат. SQL несовместим между неявным и явным методом cast / convert. Попробуйте это: задайте язык Британский месяц выбора (CAST ('2016-01-12' AS datetime)) – Chalky 20 June 2016 в 22:35

Обычно я предпочитаю вставлять в качестве

insert into tbl values('yyyyMMdd')

. Затем он будет вставлен в правильном формате на основе db.

0
ответ дан Bazzzzzzz 25 August 2018 в 21:01
поделиться

Я согласен с советом от spencer7593, но, пожалуйста, имейте в виду, что использование приведения или преобразования без формата может дать неожиданные результаты. Этот запрос T-SQL возвращает 12, а не 1.

set language British
select month(CAST('2016-01-12' AS datetime))
0
ответ дан Chalky 25 August 2018 в 21:01
поделиться

Я немного консервативен в этих вопросах, но предпочитаю использовать отдельные поля Year / Month / Day в таблице, а не поле Date, которое использует тип данных, специфичный для СУБД.

Цена, которую вы платите, заключается в том, что вы не получаете бесплатную арифметику и сортировку по дате / времени, но это достаточно просто. сделать себя или несколько более сложным предложением ORDER BY.

0
ответ дан Drew Hall 25 August 2018 в 21:01
поделиться
  • 1
    Даты в формате ISO_8601 (ГГГГ-ММ-ДД) будут ВСЕГДА работать на SQL Server - независимо от того, насколько вы набрали свой формат даты или языковые настройки. На самом деле нет необходимости разделять день, месяц, год на отдельные поля. – marc_s 4 June 2009 в 06:09
  • 2
    @Marc: Я уверен, что вы правы. Для меня проблема всегда заключалась в интерфейсе между кодом и СУБД - я могу вытащить целое из любой базы данных, но типы дат являются непостоянными и несовместимыми между API БД, языками программирования и т. Д. Мне просто легче рассматривать вещи как ints, когда они разумно могут быть. Личный выбор, очевидно ... – Drew Hall 4 June 2009 в 14:35
  • 3
    @marc_s Нет, они не будут. Установите язык британский, затем нажмите / конвертировать без указания дополнительного формата. Cast / convert предположим «yyyy-dd-mm»! – Chalky 20 June 2016 в 22:41

Имейте в виду, что DATA не является его ПРЕЗЕНТАЦИЕЙ. В этом случае DATA является DATE или DATETIME, независимо от того, как вы их показываете. Что касается вставки / обновления / сравнения значений datetime, я цитирую BOL:

При указании дат в сравнении или для ввода в инструкции INSERT или UPDATE используйте константы, которые интерпретируются одинаково для всех языковых настроек : Приложения ADO, OLE DB и ODBC должны использовать временные метки ODBC, дату и время выхода: {ts 'yyyy-mm-dd hh: mm: ss [.fff]'}, например: {ts '1998- 09-24 10:02:20 '} {d' yyyy-mm-dd '}, например: {d' 1998-09-24 '} {t' hh: mm: ss '}, например: {t '10 : 02: 20 '}

Могу вас заверить, что если вы будете использовать эти форматы, они всегда будут работать независимо от языка вашего сервера

2
ответ дан M.Turrini 25 August 2018 в 21:01
поделиться
  • 1
    Только для неявного преобразования. Будьте осторожны, как если бы вы произносили / преобразовывали «yyyy-mm-dd», а ваш язык «британский», тогда он будет обрабатывать вашу строку как «yyyy-dd-mm». – Chalky 20 June 2016 в 22:40

См. SET DATEFORMAT . SQL-культура устанавливается на уровне SET LANGUAGE на уровне сеанса. SQL Server имеет собственные настройки формата даты, независимо от ОС хостинга. Это связано с несколькими причинами: соответствие ANSI, чтобы предотвратить изменения ОС в приложениях с использованием базы данных, размещенной на этом узле, и не в последнюю очередь это совместимость, SQL долго предшествует ОС в настоящее время работает.

4
ответ дан Remus Rusanu 25 August 2018 в 21:01
поделиться

Я бы рекомендовал хранить все даты в UTC, когда они помещаются в базу данных. Это будет согласованным.

Хранение таких дат, похоже, работает хорошо ...

YYYY-MM-DD
3
ответ дан RSolberg 25 August 2018 в 21:01
поделиться
  • 1
    Стандарт ISO-8601 - работает ВСЕГДА - почему не все это уже используют? :-) – marc_s 4 June 2009 в 06:08
Другие вопросы по тегам:

Похожие вопросы: