Ошибка: невозможно вставить значение NULL в столбец «ID»

Я создал страницу регистрации, и у меня есть таблица с первичным ключом идентификатора, но я получаю эту ошибку: введите здесь описание изображения

Невозможно вставить значение NULL в столбец «Идентификатор», таблица «D:\课程学习\动态网站设计\课程设计1\APP_DATA\REGISTRATION.MDF.dbo.Table»; столбец не допускает пустых значений. ВСТАВИТЬ не удается. Заявление было прекращено.

Я только начал изучать С# и действительно не знаю, как решить эту проблему.

Это мой код.

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

public partial class Registration : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString);
            conn.Open();
            string chekuser = "select count(*) from [Table] where UserName='" + TextBoxUN.Text + "'";
            SqlCommand com = new SqlCommand(chekuser, conn);
            int temp = Convert.ToInt32(com.ExecuteScalar().ToString());
            if (temp == 1)
            {
                Response.Write("The username is exsist");
            }

            conn.Close();

        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        try
        {
            SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString);
            conn.Open();
            string insertQuery = "insert into [Table] (UserName,Email,Password) values (@Uname,@email,@password);";
            SqlCommand com = new SqlCommand(insertQuery, conn);
            com.Parameters.AddWithValue("@Uname",TextBoxUN.Text);
            com.Parameters.AddWithValue("@email", TextBoxEmail.Text);
            com.Parameters.AddWithValue("@password", TextBoxPass.Text);

            com.ExecuteNonQuery();
            Response.Redirect("Manager.aspx");
            Response.Write("Your registration is successful!");


            conn.Close();
        }
        catch (Exception ex)
        {
            Response.Write("Error:"+ex.ToString());
        }




    }
}

person Jing Cheng    schedule 27.12.2016    source источник
comment
Привет, Цзин, пожалуйста, выполните поиск, прежде чем задавать вопросы, поиск сообщения об ошибке дал десятки результатов - дубликат был в первых 3 результатах поиска, см. ответ на шаги по решению вашей проблемы. Удачи!   -  person Jeremy Thompson    schedule 27.12.2016


Ответы (3)


Свойство Id вашей таблицы базы данных не генерируется автоматически, поэтому оно ожидает значение, но вы не предоставляете его во время вставки. Поэтому либо сгенерируйте автоматически идентификатор свойства Id, либо укажите значение во время вставки. Например, давая Id 1

string insertQuery = "insert into [Table] (Id,UserName,Email,Password) values (@id,@Uname,@email,@password);";
SqlCommand com = new SqlCommand(insertQuery, conn);
com.Parameters.AddWithValue("@id",1);
com.Parameters.AddWithValue("@Uname",TextBoxUN.Text);
com.Parameters.AddWithValue("@email", TextBoxEmail.Text);
com.Parameters.AddWithValue("@password", TextBoxPass.Text);
person Mostafiz    schedule 27.12.2016

Ошибка говорит обо всем,

вы пытаетесь вставить данные в таблицу, и в вашей таблице есть столбец с идентификатором, который является первичным ключом. столбцы, которые являются первичным ключом, не могут содержать нуль, поэтому вы получаете эту ошибку

Вставьте уникальный идентификатор из своего кода или установите автоматическое создание для идентификатора столбца, настройка автоматического создания будет автоматически вставлять значение для каждой новой записи, и это решит вашу проблему.

person Ambrish Pathak    schedule 27.12.2016

Прежде всего, я должен поблагодарить вас за хорошо отформатированный первый пост, а затем за фантастическое использование параметризованных запросов.

Когда мы рассмотрим ошибку, это означает, что в вашем [Table] будет столбец [id], который установлен как не нулевой, но не автоматически увеличивающийся. Поэтому вы должны указать значение для этого столбца, чтобы вставить строку. вы можете решить это двумя способами:

  • Изменив это поле как столбец автоинкремента; Вы можете использовать команду alter, чтобы изменить поле id как autoIncrement, используя следующий запрос:

     ALTER TABLE [Table] MODIFY [ID] INT IDENTITY
    
  • Или указав значение для этого столбца в запросе на вставку, в этом случае запрос будет выглядеть так:

    string insertQuery = "insert into [Table] (Id,UserName,Email,Password) values (id,@Uname,@email,@password);";
    
person sujith karivelil    schedule 27.12.2016
comment
Привет ! Я использовал команду alter, но было что-то не так: имена столбцов в каждой таблице должны быть уникальными. Имя столбца «ID» в таблице «Таблица» указано более одного раза. - person Jing Cheng; 27.12.2016
comment
используйте MODIFY вместо ADD - person sujith karivelil; 27.12.2016