【发布时间】:2017-03-28 12:44:29
【问题描述】:
我有一个系统,它将来自在线 SQL Server 数据库的数据存储在本地存储中。使用网络服务上传和下载数据记录。我在我的代码中使用 ADO.Net 实体数据模型。
在一个表的某些上传请求中,当我尝试调用它并给出错误消息“无法将值 'null' 解析为类型 'Guid'”时,该例程失败。这只是偶尔发生,我还没有弄清楚如何重复这个问题。我在上个月记录了 80 次,在那段时间例程已成功调用 1200 次。
我在该表的数据库记录中有五个字段被定义为唯一标识符。其中两个是“NOT NULL”,另外三个是“NULL”。这是显示此表中 guid 字段的“CREATE TABLE”查询:
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)始终包含数据,并且永远不会为空。
我在这里遗漏了什么明显的东西吗?
【问题讨论】:
-
您正试图在
CircuitID和/或BoardID中存储一个空/null 值。您收到一个空值,但数据库不允许它。我建议在存储之前验证数据。并在发生这种情况时记录并给出错误,以便您修复源数据。 -
我可以看到我传递给服务器的数据,并且 CircuitID 和 BoardID 始终不为空。所以我认为这不是问题。
-
我已经成功了!我现在可以看到我正在尝试将“null”写入 CircuitMasterID 而不是 null。我现在只需要弄清楚我的 js 将 null 转换为字符串的位置。
标签: asp.net sql-server web-services ado.net local-storage