【问题标题】:MSSQL Query Error: "Cannot insert the value NULL into column <X>."MSSQL 查询错误:“无法将值 NULL 插入列 <X>。”
【发布时间】:2010-12-20 10:41:57
【问题描述】:

以下错误发生在 /// 这个编码“

无法将值 NULL 插入到列 'boarding' 中,表 'C:\USERS\VBI SERVER\DOCUMENTS\VISUAL STUDIO 2008\WEBSITES\VOLVO\APP_DATA\ASPNETDB.MDF.dbo.boardingpt' ;列不允许空值。插入失败。声明已终止。

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim con As New SqlConnection
        Dim cmd As New SqlCommand
        con.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ASPNETDB.MDF;Integrated Security=True;User Instance=True"
        con.Open()
        cmd.Connection = con
        cmd.CommandText = "INSERT INTO boardingpt (service, travelid, bdpt_name, time) VALUES('" & Trim(TextBox3.Text.ToString) & "', '" & Trim(TextBox4.Text.ToString) & "', '" & Trim(TextBox1.Text.ToString) & "','" & Trim(TextBox2.Text.ToString) & "')"
        cmd.ExecuteNonQuery()
        con.Close()

    End Sub

【问题讨论】:

  • 你在哪里为 'boarding' 赋值?这是必需的。
  • 附带说明 - 我建议您阅读 sql 注入攻击 - 因为您的代码非常容易受到攻击。我试图找到 DROP Freddy Tables 卡通但找不到。当当。
  • 啊,Bobby Tables - 难怪我找不到它。 :) stackoverflow.com/questions/3890091/…

标签: asp.net sql-server vb.net


【解决方案1】:

您需要将 Column 更改为 IDENTITY

或在SSMS下的列定义中选择

Table Designer -&gt; Identity Specification -&gt; (Is Identity) 到 true

【讨论】:

  • 我通常会同意你的观点,但是,对于字段应该是一个身份字段的问题并不清楚。是的,它会解决问题,但它是正确的数据模型吗?
  • 如果您查看表格设计,那几乎是显而易见的选择。或者也许它应该是一个外键?
  • 我的观点是,如果不了解该字段的更多信息,我们不能明确说它应该是一个身份字段。是的,它很可能是一个外键。没有足够的信息,恕我直言。
  • 我认为提供的 INSERT 语句似乎是一个很好的起点......
  • 同意@astander - 这是一个 INT,它是一个 PK。鉴于该表也称为登机,非常安全的赌注它应该是一个身份列。但正如你所说,不能 100% 确定。
【解决方案2】:

您没有为boarding 字段提供值,这是一个NOT NULL 字段(Allow Nulls 未选中)。

成为NOT NULL 字段意味着您有为其提供值。

如果该字段应该是表中行的ID,则应将其设置为IDENTITY字段。

有关如何使用 Visual Studio 数据库设计器更改标识属性,请参阅 MSDN 上的 this。

【讨论】:

    【解决方案3】:

    您没有将登机列设置为Identity,因此尝试在其中放置一个空值(因为您没有在插入查询中提供它的值)

    【讨论】:

      【解决方案4】:

      您正在尝试为设置为 NOT NULL 的列插入 NULL 值。

      解决方案

      • 将 boarding 列设为 ALLOW NULL 并删除主键(因为主键永远不能为空)

      或

      • 在 boarding 列的表格设计模式中将 IDENTITY 设置为 YES

      希望对你有帮助

      谢谢 维韦克

      【讨论】:

        猜你喜欢
        • 2013-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多