由于output.inserted id错误

时间:2018-10-31 14:29:37

标签: sql asp.net

大家好,我有这段代码试图向数据库中的骑手表添加一条记录,但是当我运行该代码时,发生以下错误,我可能知道如何解决此错误?:

  

System.Data.SqlClient.SqlException:'无法将NULL值插入   列“ RiderID”,表“ bikestop.dbo.Rider”;列不允许   空值。 INSERT失败。'

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;


namespace bikestop
{
    public partial class bikestop_Register : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        public int addRider()
        {
            string strConn = ConfigurationManager.ConnectionStrings
                ["BikeStop_DBString"].ToString();
            SqlConnection conn = new SqlConnection(strConn);
            SqlCommand cmd = new SqlCommand(
                "Insert INTO Rider (Name,RiderUsername,Password) " +
                "OUTPUT INSERTED.RiderID " +
                "VALUES (@Name,@RiderUsername,@Password)", conn);
            cmd.Parameters.AddWithValue("@Name", txt_Name.Text);
            cmd.Parameters.AddWithValue("@RiderUsername", txt_RiderUsername.Text);
            cmd.Parameters.AddWithValue("@Password", txt_RiderPw.Text);
            conn.Open();
            int id = (int)cmd.ExecuteScalar();
            conn.Close();
            return id;
        }

        protected void btn_Register_Click(object sender, EventArgs e)
        {

            addRider(); 
        }
    }
}

以下是上述代码的aspx文件的代码:

<%@ Page Title="" Language="C#" MasterPageFile="~/bikestop_LoggedOut.Master" AutoEventWireup="true" CodeBehind="bikestop_Register.aspx.cs" Inherits="bikestop.bikestop_Register" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
    <style type="text/css">
    .auto-style1 {
        width: 195px;
    }
</style>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <table class="w-100">
    <tr>
        <td class="auto-style1">Name</td>
        <td>
            <asp:TextBox ID="txt_Name" runat="server"></asp:TextBox>
        </td>
    </tr>
    <tr>
        <td class="auto-style1">Username</td>
        <td>
            <asp:TextBox ID="txt_RiderUsername" runat="server"></asp:TextBox>
        </td>
    </tr>
    <tr>
        <td class="auto-style1">Password</td>
        <td>
            <asp:TextBox ID="txt_RiderPw" runat="server" TextMode="Password"></asp:TextBox>
        </td>
    </tr>
    <tr>
        <td class="auto-style1">&nbsp;</td>
        <td>
            <asp:Button ID="btn_Register" runat="server" Text="Register" OnClick="btn_Register_Click" />
        </td>
    </tr>
</table>
</asp:Content>

编辑:骑手桌的外观如下:

rider table

这是用于创建它的代码:

CREATE TABLE Rider(

RiderID int  NOT NULL,
Name varchar(10) NOT NULL,
RiderUsername varchar(250) NOT NULL,
Password varchar(250) NOT NULL,
Primary Key (RiderID)
)

1 个答案:

答案 0 :(得分:1)

您没有插入ID或没有自动递增(因此SQL无法知道要在ID中插入哪个值)。

您可以这样创建表格:

CREATE TABLE Rider (
RiderID int NOT NULL PRIMARY KEY IDENTITY(1,1),
Name varchar(10) NOT NULL,
RiderUsername varchar(250) NOT NULL,
Password varchar(250) NOT NULL
)

,您将在ID列上自动递增。

如果您已经有数据,则无法将列更改为用户身份(1,1),但是有两个选择:

-创建一个具有标识(1,1)的新表并删除现有表

-创建一个具有标识(1,1)的新列,并删除现有列

注意:您将需要处理关系,但这是最干净的方法。我可能会选择第二种选择。

有关THIS LINK上IDENTITY(1,1)的更多信息