2016-11-14 2 views
0

У меня есть система, которая хранит данные из онлайн-базы данных SQL Server в локальном хранилище. Записи данных загружаются и загружаются с помощью веб-службы. Я использую ADO.Net Entity Data Model в моем коде.Веб-сервис бросает «Значение« null »не может быть проанализировано как тип« Guid ».» error

В некоторых запросах на загрузку для одной таблицы процедура не работает, когда я пытаюсь вызвать ее, выдавая сообщение об ошибке «Значение« null »не может быть проанализировано как тип« Guid ». Это случается только иногда, и я не решил, как повторить проблему. Я зарегистрировал его 80 раз за последний месяц, и за это время процедура была вызвана успешно 1200 раз.

У меня есть пять полей в записи базы данных для этой таблицы, которые определены как uniqueidentifiers. Два из них - «NOT NULL», а остальные три «NULL». Вот «CREATE TABLE» запрос с указанием Guid полей в этой таблице:

CREATE TABLE [dbo].[Circuit](
[CircuitID] [uniqueidentifier] NOT NULL, 
[BoardID] [uniqueidentifier] NOT NULL, 
[RCDID] [uniqueidentifier] NULL, 
[CircuitMasterID] [uniqueidentifier] NULL, 
[DeviceID] [uniqueidentifier] NULL, 
CONSTRAINT [PK_CircuitGuid] PRIMARY KEY NONCLUSTERED 
(
[CircuitID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) 
) 

GO 

ALTER TABLE [dbo].[Circuit] WITH CHECK ADD CONSTRAINT [FK_Circuit_RCD] FOREIGN KEY([RCDID]) 
REFERENCES [dbo].[RCD] ([RCDID]) 
GO 

ALTER TABLE [dbo].[Circuit] CHECK CONSTRAINT [FK_Circuit_RCD] 
GO 

ALTER TABLE [dbo].[Circuit] WITH CHECK ADD CONSTRAINT [FK_CircuitGuid_Board] FOREIGN KEY([BoardID]) 
REFERENCES [dbo].[Board] ([BoardID]) 
GO 

ALTER TABLE [dbo].[Circuit] CHECK CONSTRAINT [FK_CircuitGuid_Board] 
GO 

Данные, загруженные для Guid полей в этой таблице выглядит следующим образом:

{"__type":"Circuit:#WaspWA","BoardID":"edb5f774-5e5d-490c-860b-73c3419628cf","CircuitID":"e95bbfa3-2af6-49a5-94dd-c98924ec9a62","CircuitMasterID":null,"DeviceID":"daf12fce-675c-46d9-94c4-ed28c63cdf30","RCDID":null} 

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

У меня есть другие подобные таблицы в базе данных, которые никогда не создают никаких проблем. Именно эта таблица вызывает сообщения об ошибках. Два поля, которые определены как «NOT NULL» (BoardID и CircuitID), всегда имеют в них данные и никогда не являются нулевыми.

Есть ли что-то очевидное, что я пропустил здесь?

+0

Вы пытаетесь сохранить пустое/нулевое значение в 'CircuitID' и/или' BoardID'. Вы получаете нулевое значение, но база данных этого не позволит. Я предлагаю проверить данные перед их хранением. И войдите и сообщите об ошибке, когда это произойдет, чтобы вы могли исправить исходные данные. – VDWWD

+0

Я могу видеть данные, которые я передаю на сервер, а CircuitID и BoardID всегда не являются нулевыми. Поэтому я не думаю, что это проблема. –

+0

Я на полпути! Теперь я вижу, что я пытаюсь записать 'null' в CircuitMasterID, а не null. Теперь мне просто нужно выяснить, где мои js превращают нуль в строку. –

ответ

0

Проблема заключалась в том, что значение «null», строка, записывалось в мою локальную копию CircuitMasterID, а не в null. Поэтому, когда я попытался написать это на SQL, ему это не понравилось. Сообщение об ошибке SQL показывает null в кавычках, но я не был уверен, было ли это потому, что это была строка, или потому, что сообщение об ошибке помещало значение в кавычки, чтобы очертить его.

Значение 'null' нашло свой путь в поле CircuitMasterID, потому что я записал значение null в некоторый HTML, и когда это было сохранено в поле, оно стало «null». Я храню данные в локальном хранилище, и это не дает очень хорошего управления типом. Примечание к self 'должно добавить лучшее управление типом'.