2015-04-21 4 views
3

Я пытаюсь вставить данные в свою базу данных с помощью этих команд (Домашнее задание):Конверсия удалось при преобразовании даты и/или времени из символьной строки - Visual Studio

SET IDENTITY_INSERT [dbo].[Movies] ON 

INSERT INTO [dbo].[Movies] ([Id], [CategoryId], [Title], [Director], [DateReleased]) 
VALUES (1, 3, N'Titanic', N'James Cameron', N'1997‐06‐21 00:00:00') 

INSERT INTO [dbo].[Movies] ([Id], [CategoryId], [Title], [Director], [DateReleased]) 
VALUES (2, 1, N'StarWars', N'George Lucas', N'1977-06‐01 00:00:00') 

INSERT INTO [dbo].[Movies] ([Id], [CategoryId], [Title], [Director], [DateReleased]) 
VALUES (3, 1, N'Jurassic Park', N'Steven Spielberg', N'1993‐06‐17 00:00:00') 

INSERT INTO [dbo].[Movies] ([Id], [CategoryId], [Title], [Director], [DateReleased]) 
VALUES (4, 4, N'Jaws', N'Steven Spielberg', N'1975-05-30 00:00:00') 

INSERT INTO [dbo].[Movies] ([Id], [CategoryId], [Title], [Director], [DateReleased]) 
VALUES (5, 3, N'Ghost', N'Jerry Zucker', N'1990‐06-­14 00:00:00') 

INSERT INTO [dbo].[Movies] ([Id], [CategoryId], [Title], [Director], [DateReleased]) 
VALUES (7, 3, N'Forrest Gump', N'Robert Zemeckis', N'1994‐06‐18 00:00:00') 

INSERT INTO [dbo].[Movies] ([Id], [CategoryId], [Title], [Director], [DateReleased]) 
VALUES (8, 2, N'Ice Age', N'Chris Wedge', N'2002‐06‐26 00:00:00') 

INSERT INTO [dbo].[Movies] ([Id], [CategoryId], [Title],[Director], [DateReleased]) 
VALUES (9, 2, N'Shrek', N'AndrewAdamson', N'2001‐06‐25 00:00:00') 

INSERT INTO [dbo].[Movies] ([Id], [CategoryId], [Title],[Director], [DateReleased]) 
VALUES (10, 1, N'Independence Day', N'Roland Emmerich', N'1996-06-20 00:00:00') 

INSERT INTO [dbo].[Movies] ([Id], [CategoryId], [Title], [Director], [DateReleased]) 
VALUES (11, 4, N'The Ring', N'Gore Verbinski', N'2002‐06‐26 00:00:00') 

SET IDENTITY_INSERT [dbo].[Movies] OFF 

Но он продолжает давать мне исключение:

Конверсия удалось при преобразовании даты и/или времени из символьной строки

+0

Пожалуйста, покажите свой код ... или если код не задействован, удалите тег 'C#', поскольку он не имеет значения. В любом случае, покажите схему. –

+0

Хорошо исправлено. Извините, моя ошибка - это не какой-либо код C#. – user4814432

+1

(И делать все * из этих вставок не удается? Нам нужно только увидеть один ... в данный момент мы не можем определить, не первый ли первый или последний ...) –

ответ

1

Есть много форматов, поддерживаемых SQL Server - см MSDN Books Online on CAST and CONVERT. Большинство из этих форматов зависят от от того, какие настройки у вас есть - поэтому эти настройки могут работать несколько раз, а иногда и нет.

Путь решения этой проблемы заключается в использовании (слегка адаптированный) ISO-8601 формат даты, который поддерживается SQL Server - это формат работы всегда - независимо от ваших языковых настроек и DateFormat SQL Server.

ISO-8601 format поддерживается SQL Server поставляется в двух вариантах:

  • YYYYMMDD для всего датирует (без временной части); примечание здесь: нет тире!, это очень важно! YYYY-MM-DD is NOT независимо от настроек даты и времени на вашем SQL Server и будет NOT работать во всех ситуациях!

или:

  • YYYY-MM-DDTHH:MM:SS для даты и времени - здесь отметить: этот формат имеет дефис (но они могут быть опущены), и фиксированный T в качестве разделителя между датой и временем часть вашего DATETIME.

Это действительное для SQL Server 2000 и новее.

Если вы используете SQL Server 2008 или более поздней версии и DATE тип данных (только DATE - неDATETIME), то вы действительно можете также использовать формат YYYY-MM-DD и что будет работать тоже с любыми настройками в вашем SQL Server ,

Не спрашивайте меня, почему эта целая тема настолько сложна и несколько запутанна - так оно и есть. Но с форматом YYYYMMDD вы должны быть в порядке для любой версии SQL Server и для любого языка и параметра dateformat на вашем SQL Server.

Рекомендация для SQL Server 2008 и новее - использовать DATE, если вам нужна только часть даты, и DATETIME2(n), когда вам нужны дата и время.Вы должны попытаться начать поэтапный отказ от типа данных DATETIME, если это когда-либо возможно

Так что в вашем примере кода - эта вставка работает? (я добавил T разделитель между YYYY-MM-DD даты и времени часть)

INSERT INTO [dbo].[Movies] ([Id], [CategoryId], [Title], [Director], [DateReleased]) 
VALUES (11, 4, N'The Ring', N'Gore Verbinski', N'2002‐06‐26T00:00:00') 

Или, если вы заинтересованы только в самой (не время) Дата - попробовать это:

INSERT INTO [dbo].[Movies] ([Id], [CategoryId], [Title], [Director], [DateReleased]) 
VALUES (11, 4, N'The Ring', N'Gore Verbinski', N'20020626') 
0

Попробуйте это:

'2002‐06‐26 00:00:00.000' 
+0

Не получилось, но спасибо в любом случае :) Просто бросил мне ту же ошибку. – user4814432

+0

Можете ли вы создать сценарий CREATE TABLE? – alerya

+0

Какой тип DateReleased? – alerya