【问题标题】:dataset update fails when inserting new row插入新行时数据集更新失败
【发布时间】:2011-06-18 08:01:02
【问题描述】:

我正在通过 DataAdapter1.Update() 方法将新行插入数据集 dsStaff1。 我收到以下错误:

无法将值 NULL 插入 “启用”列,表 'dbo.tblStaff';列不允许 空值。插入失败。该声明有 被终止了。

我在 tblStaff 中确实有一个布尔字段“已启用”,我想这是 SQL Server 中的关键字。它默认为“真”。我真的无法更改该字段的名称。有解决办法吗?或者我做错了什么? PS:我正在通过 sqlcommand builder 生成插入、更新命令。

【问题讨论】:

    标签: sql-server dataset dataadapter sqlcommandbuilder


    【解决方案1】:

    我的代码:。更新失败。

            Dim dr As System.Data.DataRow
    
            dr = DsStaff1.Tables(0).NewRow()
    
            dr.BeginEdit()
            dr.Item("FirstName") = txtName.Text
            dr.Item("LastName") = txtSurname.Text
    
            dr.Item("StaffID") = txtStaffID.Text
            dr.Item("Enabled") = cbActive.Checked
            dr.EndEdit()
            DsStaff1.Tables(0).Rows.Add(dr)
    
            DataAdapter1.Update(DsStaff1)
    

    我也在 DataAdapter1 中使用 TableMappings

            DataAdapter1.TableMappings.Add("Table", DsStaff1.Tables("tblStaff").ToString)
    

    附:更新和删除现有行可以正常工作。只是插入新行是行不通的。

    【讨论】:

      【解决方案2】:

      只需在更新参数中将固定值传递给数据集

      喜欢

      <asp:Parameter Name="col1" Type="boolean" DefaultValue="true"/>
      

      【讨论】:

        【解决方案3】:

        如果您有默认值,那么您的 SQL 命令构建器必须发送 NULL (DBNull.Value) 以覆盖默认值。默认值仅在以下情况下适用:

        • 如果您没有为 INSERT 中的列指定值
        • 或者如果您使用关键字 DEFAULT

        这两种形式之一:

        --Enabled is not mentioned, will use default
        INSERT (col1, col1) VALUES (col1, col2) 
        
        --Enabled will use DEFAULT
        INSERT (col1, col1, Enabled) VALUES (col1, col2, DEFAULT) 
        

        【讨论】:

        • 您好,感谢您的回复。那么如何解决问题呢?我不知道插入命令中有什么,因为它是自动生成的。我是否需要使用 Sqlcommand 参数显式编写插入命令?我已将我的代码粘贴在底部。更新失败
        猜你喜欢
        • 1970-01-01
        • 2016-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-01
        相关资源
        最近更新 更多