1

登録ページを作成し、ID のプライマリ キーを持つテーブルを作成しましたが、次のエラーが発生しました: イメージの説明をここに入力してください

値 NULL を列 'Id'、テーブル 'D:\课程学习\动态网站設計计\课程設計计1\APP_DATA\REGISTRATION.MDF.dbo.Table' に挿入できません。列はヌルを許可しません。INSERT は失敗します。ステートメントは終了されました。

私は C# を学び始めたばかりで、この問題を解決する方法が本当にわかりません。

これは私のコードです。

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());
        }




    }
}
4

3 に答える 3

1

Idデータベーステーブルのプロパティは自動生成されないため、値が期待されますが、挿入中にそれを提供していません。したがって、Idプロパティ ID を自動生成するか、挿入時に値を指定してください。たとえば、Id1を与える

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);
于 2016-12-27T04:33:19.577 に答える
1

エラーがすべてを物語っています。

テーブルにデータを挿入しようとしていて、テーブルには主キーである「id」の列があります。主キーである列はnullを保持できないため、このエラーが発生しています

コードから一意の ID を挿入するか、列 ID に自動生成を設定します。自動生成を設定すると、新しいレコードごとに is が自動挿入され、問題が解決します。

于 2016-12-27T04:38:16.887 に答える
0

まず第一に、適切にフォーマットされた最初の投稿に感謝しなければなりません。次に、パラメーター化されたクエリの素晴らしい使用に感謝します。

エラーを調べると、null ではなく自動インクリメントではないように設定されている[id]列があることを意味します。[Table]したがって、行を挿入するには、その列に値を指定する必要があります。これは次の 2 つの方法で解決できます。

  • そのフィールドを自動インクリメント列として変更することにより; 次のクエリを使用して、alter コマンドを使用して id フィールドを autoIncrement として変更できます。

     ALTER TABLE [Table] MODIFY [ID] INT IDENTITY
    
  • または、挿入クエリでその列に値を指定すると、この場合、クエリは次のようになります。

    string insertQuery = "insert into [Table] (Id,UserName,Email,Password) values (id,@Uname,@email,@password);";
    
于 2016-12-27T04:36:36.200 に答える