代码之家  ›  专栏  ›  技术社区  ›  Darrell Gadson

无法将值NULL插入列“UserId”

  •  2
  • Darrell Gadson  · 技术社区  · 12 年前

    我得到了这个例外,不知道为什么: Cannot insert the value NULL into column 'UserId'

    这是我的代码:

    <asp:TextBox ID="FirstNameBox" runat="server" />
    <br />
    <br />
    <asp:TextBox ID="LastNameBox" runat="server" />
    <asp:SqlDataSource
        ID="InsertText"
        runat="server"
        ConnectionString="<%$ ConnectionStrings:DefaultConnection %>"
        InsertCommand="INSERT INTO UserForm (UserId,FirstName,LastName) VALUES  (@UserId,@FiName,@LaName)">
    
       <InsertParameters>
          <asp:ControlParameter Name="FiName" ControlID="FirstNameBox" PropertyName="Text" />
          <asp:ControlParameter Name="LaName" ControlID="LastNameBox" PropertyName="Text" />
          <asp:Parameter Name="UserId" />
       </InsertParameters>
     </asp:SqlDataSource>
    

    这是我的代码隐藏文件中的内容:

    public void button1_Click(object sender, System.EventArgs e)
    {
       InsertText.Insert();
    }
    
    3 回复  |  直到 10 年前
        1
  •  3
  •   walther    12 年前

    目前,您已经设置了您的表,您必须为UserId提供一个值。如果这不是预期的行为,我建议将SQL server中的列更改为自动递增。。。

    例如,它应该是这样的:

    [UserId]       INT            IDENTITY (1, 1) NOT NULL
    

    根据评论编辑:

    我将UserId列设置为主键和外键。我设置了 UserId为GUID。当我检查表时,UserId已经是 那里我只想添加一个用户的名字或姓氏。

    不确定你的问题是什么,首先你说的是 INSERT ,现在您正在讨论为现有记录设置值。如果你想 update 对于现有记录,您需要首先获取id并相应地更新值

    示例SQL命令可能类似于以下内容:

    UPDATE UserForm SET FirstName = @FirstName, LastName = @LastName WHERE UserId = @UserId
    

    Insert按照它所说的去做——在表中插入一条新记录。

        2
  •  2
  •   leo    12 年前

    您没有为userId列设置任何值。如果已经设置了标识。您可以在插入数据时删除userid。

        3
  •  0
  •   Kjartan madhukar Jha    11 年前

    我只是获取了用户ID并执行了一个更新命令。

    Guid userGuid = (Guid)Membership.GetUser(User.Identity.Name).ProviderUserKey;
    
    UserIdLabel.Text = userGuid.ToString();