2016-11-14 2 views
0

로컬 SQL Server 데이터베이스의 데이터를 로컬 저장소에 저장하는 시스템이 있습니다. 데이터 레코드는 웹 서비스를 사용하여 업로드되고 다운로드됩니다. 내 코드에서 ADO.Net 엔터티 데이터 모델을 사용하고 있습니다.웹 서비스에서 "값 'null'을 'Guid'유형으로 구문 분석 할 수 없습니다." 오류

한 테이블에 대한 일부 업로드 요청에서 "null '값을'Guid '유형으로 구문 분석 할 수 없다는 오류 메시지가 표시되면이를 호출하려고하면 루틴이 실패합니다." 이 문제는 가끔씩 만 발생하며 문제를 반복하는 방법을 찾지 못했습니다. 나는 지난 달에 80 번 기록했고 그 시간에 루틴은 1200 번 성공적으로 호출되었습니다.

고유 식별자로 정의 된이 테이블의 데이터베이스 레코드에는 다섯 개의 필드가 있습니다. 이들 중 두 개는 'NOT NULL'이고 다른 세 개는 'NULL'입니다. 이 기록은 하나에서 만든

{"__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} 

:이 테이블의 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 필드를 보여주는 '테이블 만들기'쿼리입니다 컴퓨터가 온라인 SQL Server 데이터베이스에 업로드 된 다음 다른 컴퓨터로 다운로드됩니다.

데이터베이스에는 다른 문제가없는 비슷한 테이블이 있습니다. 나는 오류 메시지를받는 테이블입니다. 'NOT NULL'(BoardID 및 CircuitID)로 정의 된 두 필드는 항상 데이터를 가지며 null이 아닙니다.

여기에 내가 놓친 뭔가가 있습니까?

+0

빈/널 값을 'CircuitID'또는/또는 'BoardID'에 저장하려고합니다. null 값을 받고 있지만 데이터베이스에서 허용하지 않습니다. 저장하기 전에 데이터 유효성을 검사하는 것이 좋습니다. 소스 데이터를 수정할 수 있도록 로그하고 오류가 발생하면이를 제공하십시오. – VDWWD

+0

서버에 전달중인 데이터를 볼 수 있으며 CircuitID와 BoardID는 항상 null이 아닙니다. 그래서 나는 그것이 문제라고 생각하지 않습니다. –

+0

나는 중간에있다! 이제 널 (null)이 아닌 CircuitMasterID에 'null'을 쓰려고한다는 것을 알 수 있습니다. 이제는 j에서 null을 문자열로 바꾸는 작업 만하면됩니다. –

답변

0

'null'이라는 문자열 값이 null이 아닌 CircuitMasterID의 로컬 복사본에 기록되는 것이 문제였습니다. 그래서 이것을 SQL에 쓰려고 할 때, 그것을 좋아하지 않았습니다. SQL 오류 메시지는 따옴표로 null을 표시하지만 문자열인지 또는 오류 메시지가 값을 따옴표로 묶어 설명했는지 여부는 확실하지 않았습니다.

null 값을 일부 HTML에 썼기 때문에 'null'값이 CircuitMasterID 필드에 입력되었습니다.이 값을 필드에 다시 저장하면 'null'이됩니다. 로컬 저장소에 데이터를 저장하는 중입니다. 아주 좋은 유형 제어가 아닙니다. 자아에 대한 참고는 더 나은 유형 제어를 추가해야합니다.