【问题标题】:Web service throws "The value 'null' cannot be parsed as the type 'Guid'." errorWeb 服务抛出“值 'null' 无法解析为类型 'Guid'。”错误
【发布时间】: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


【解决方案1】:

问题是字符串值“null”被写入我的 CircuitMasterID 本地副本,而不是 null。因此,当我尝试将其写入 SQL 时,它并不喜欢它。 SQL 错误消息在引号中显示 null,但我不确定这是因为它是一个字符串还是因为错误消息将值放在引号中以描述它。

值“null”已进入 CircuitMasterID 字段,因为我已将值 null 写入一些 HTML,当它被保存回该字段时,它变为“null”。我将数据存储在本地存储中,这并不能提供很好的类型控制。注意自我“必须添加更好的类型控制”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    相关资源
    最近更新 更多