2016-11-14 2 views
0

Ich habe ein System, das Daten aus einer Online SQL Server-Datenbank im lokalen Speicher speichert. Datensätze werden über einen Webservice hochgeladen und heruntergeladen. Ich verwende ein ADO.Net-Entitätsdatenmodell in meinem Code.Webdienst-Würfe "Der Wert 'null' kann nicht als Typ 'Guid' analysiert werden." Fehler

Bei einigen Upload-Anfragen für eine Tabelle schlägt die Routine fehl, wenn ich versuche, sie aufzurufen, was die Fehlermeldung "Der Wert 'null' kann nicht als Typ 'Guid' geparst werden." Dies passiert nur gelegentlich und ich habe nicht herausgefunden, wie ich das Problem wiederholen kann. Ich habe es im letzten Monat 80 mal geloggt und in dieser Zeit wurde die Routine erfolgreich 1200 Mal aufgerufen.

Ich habe fünf Felder im Datenbankdatensatz für diese Tabelle, die als uniqueidentifiers definiert sind. Zwei davon sind 'NOT NULL' und die anderen drei sind 'NULL'. Hier ist die 'CREATE TABLE' query die GUID Felder in dieser Tabelle zeigt:

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 

Die Daten für die GUID-Felder in dieser Tabelle hochgeladen sieht wie folgt aus:

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

Dieser Datensatz auf eine erstellt wurde Maschine in die Online SQL Server-Datenbank hochgeladen und dann auf einen anderen Rechner heruntergeladen.

Ich habe andere ähnliche Tabellen in der Datenbank, die nie irgendwelche Probleme geben. Es ist nur diese Tabelle, von der ich Fehlermeldungen erhalte. Die beiden Felder, die als 'NOT NULL' (BoardID und CircuitID) definiert sind, enthalten immer Daten und sind niemals Null.

Gibt es etwas offensichtlich, dass ich hier verpasst habe?

+0

Sie versuchen, einen leeren/Null-Wert in "CircuitID" und/oder "BoardID" zu speichern. Sie erhalten einen Nullwert, aber die Datenbank lässt dies nicht zu. Ich schlage vor, die Daten zu validieren, bevor sie gespeichert werden. Und protokollieren Sie und geben Sie einen Fehler, wenn das passiert, damit Sie die Quelldaten reparieren können. – VDWWD

+0

Ich kann die Daten sehen, die ich an den Server übergebe, und CircuitID und BoardID sind immer nicht null. Also ich glaube nicht, dass das das Problem ist. –

+0

Ich bin halb da! Ich kann jetzt sehen, dass ich versuche, "Null" in die CircuitMasterID und nicht null zu schreiben. Ich muss jetzt nur herausfinden, wo meine js Null in eine Schnur verwandelt. –

Antwort

0

Das Problem war, dass der Wert "null", eine Zeichenfolge, in meine lokale Kopie von CircuitMasterID geschrieben wurde anstatt Null. Als ich also versuchte, dies in SQL zu schreiben, gefiel es mir nicht. Die SQL-Fehlermeldung zeigt null in Anführungszeichen, aber ich war nicht sicher, ob dies daran lag, dass es sich um eine Zeichenfolge handelte oder weil die Fehlermeldung den Wert in Anführungszeichen setzte, um sie zu beschreiben.

Der Wert 'null' hatte seinen Weg in das CircuitMasterID-Feld gefunden, weil ich den Wert null in HTML geschrieben hatte und als dieser wieder in das Feld gespeichert wurde, wurde er 'null'. Ich speichere Daten im lokalen Speicher und dies gibt keine sehr gute Typenkontrolle. Anmerkung zu self 'muss eine bessere Typenkontrolle hinzufügen'.

Verwandte Themen