【问题标题】:Record error after insert, conversion from type 'DBNull' to type 'Integer' is not valid插入后记录错误,从“DBNull”类型到“Integer”类型的转换无效
【发布时间】:2011-11-18 16:03:00
【问题描述】:

我正在尝试通过 sql 管理工作室将记录插入到表中,并插入命令与网站的 web 表单。

INSERT INTO [dbo].[Records] ([tp_ID], [Offense_ID], [LLO_ID], [LLLA], [SSN], [LastName], [FirstName], [MI], [Title], [Grade], [Organization], [BranchOfService],  [Category], [DateCategory],  [IsHoldover], [IsHoldoverDate])
VALUES (60033, N'E', 17, NULL, N'222-12-0222', N'SINGER', N'Te ', N'Y', NULL, N'SrA', N'703 Airbase', N'FORCE', NULL, NULL)

虽然当我访问网站并尝试查看记录时,我收到以下错误消息:

System.InvalidCastException:从“DBNull”类型到“Integer”类型的转换无效。

Line 349:ckIsHoldOver.Checked = (CInt(rdr("IsHoldover")) = -1)

---如果我通过 Web 表单创建记录,后面的代码中的 vb 会捕获字段数据---

 .Parameters.AddWithValue("@IsHoldover", ckIsHoldOver.Checked)

【问题讨论】:

  • 错误是有道理的,根据您的输入语句,IsHoldOver 字段正在获取 NULL,因此 .NET 代码无法将 NULL 转换为整数...不知道问题是什么,看来一切都在正常工作......

标签: sql


【解决方案1】:

rdr("IsHoldover")NULL,因此当使用CInt() 转换为整数时,这会导致异常。

您可以更改 INSERT 语句以插入 Non-NULL bit 值(10),或者更改您的 VB 代码以考虑此可为空的字段:

If Not IsDBNULL(rdr("IsHolderover")) Then ckIsHoldOver.Checked = (CInt(rdr("IsHoldover")) = -1)

【讨论】:

    【解决方案2】:

    不确定您的问题是什么。您正在在 IsHoldOver 中插入一个空值,并且在网站上您正尝试将该空值转换为整数。

    也许尝试在 IsHoldOver 中输入一个值

    INSERT INTO [dbo].[Records] ([tp_ID], [Offense_ID], [LLO_ID], [LLLA], [SSN], [LastName], [FirstName], [MI], [Title], [Grade], [Organization], [BranchOfService],  [Category], [DateCategory],  [IsHoldover], [IsHoldoverDate])
    VALUES (60033, N'E', 17, NULL, N'222-12-0222', N'SINGER', N'Te ', N'Y', NULL, N'SrA', N'703 Airbase', N'FORCE', 0, NULL)
    

    或处理网页上的空值,Curt 将在下面向您展示如何操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 2014-06-10
      • 2012-11-19
      • 2011-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多