大家好,我有这段代码试图向数据库中的骑手表添加一条记录,但是当我运行该代码时,发生以下错误,我可能知道如何解决此错误?:
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"> </td>
<td>
<asp:Button ID="btn_Register" runat="server" Text="Register" OnClick="btn_Register_Click" />
</td>
</tr>
</table>
</asp:Content>
编辑:骑手桌的外观如下:
这是用于创建它的代码:
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)
)
答案 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)的更多信息