我尝试注册时总是收到此错误

时间:2017-12-13 11:08:24

标签: c# sql .net asp.net-mvc

我正在使用Asp.Net MVC,我的程序的一个功能是注册和登录。我尝试注册时总是收到此错误。

  

System.Data.SqlClient.SqlException:列名或提供的数量   值与表定义不匹配。

型号:

public class Users
{
    [Key]
    public int ID { get; set; }

    [Display(Name = "User Type")]
    [Required]
    public int TypeID { get; set; }

    public List<UserType> Types { get; set; }
    public string UserType { get; set; }

    [Display(Name = "Email Address")]
    [MaxLength(80)]
    [Required]
    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }

    [Display(Name = "Password")]
    [MaxLength(50)]
    [Required]
    [DataType(DataType.Password)]
    public string Password { get; set; }

    [Display(Name = "First Name")]
    [MaxLength(80)]
    [Required]
    public string FN { get; set; }

    [Display(Name = "Last Name")]
    [MaxLength(80)]
    [Required]
    public string LN { get; set; }


    [Display(Name = "Phone")]
    [MaxLength(12)]
    [MinLength(12)]
    [Required]
    public string Phone { get; set; }


    [Display(Name = "Status")]
    public string CurrentStatus { get; set; }

    [Display(Name = "Status")]
    public List<SelectListItem> Status { get; set; }
}

控制器:

  [HttpPost]
    public ActionResult Add(Users record)
    {
        if (IsExisting(record.Email))
        {
            ViewBag.Message = "<div class='alert alert-danger'>Email address already existing.</div>"; 
            record.Types = GetUserTypes();
            return View(record);
        }
        else
        {
            using (SqlConnection con = new SqlConnection(Helper.GetConnection()))
            {
                con.Open();
                string query = @"INSERT INTO users VALUES
                (@typeID, @userEmail, @userPassword, @userFirstName,
                @userLastName, @userPhone, @userStatus)";
                using (SqlCommand cmd = new SqlCommand(query, con))
                {
                    cmd.Parameters.AddWithValue("@typeID", record.TypeID);
                    cmd.Parameters.AddWithValue("@userEmail", record.Email);
                    cmd.Parameters.AddWithValue("@userPW", Helper.Hash(record.Password));
                    cmd.Parameters.AddWithValue("@userFN", record.FN);
                    cmd.Parameters.AddWithValue("@userLN", record.LN);
                    cmd.Parameters.AddWithValue("@userPhone", record.Phone);  
                    cmd.Parameters.AddWithValue("@userStatus", "Active");
                    cmd.ExecuteNonQuery();
                    ViewBag.Message = "<div class='alert alert-success'>Record added.</div>"; // displays alert message when record is successfully added
                    ModelState.Clear(); // removes existing user input

                    record.Types = GetUserTypes();
                    return View(record);
                }
            }
        }
    }

2 个答案:

答案 0 :(得分:3)

如果你没有在insert语句中指定users表的列,它希望你传递所有列的值

如果您不想为所有列传递值,只需指定要为其提供值的列名称:

INSERT INTO users (typeID, userEmail, userPassword, userFirstName, 
                   userLastName, userPhone, userStatus)
VALUES (@typeID, @userEmail, @userPassword, @userFirstName, 
         @userLastName, @userPhone, @userStatus)

答案 1 :(得分:0)

在查询插入时,在VALUES之前需要定义列...

喜欢这个......

string query = "INSERT INTO table (id,username,password,email) VALUES (@id, @username, @password, @email)";

编辑:

string query = "INSERT INTO table (typeID, userEmail, userPW, userFN, userLN, userPhone, userStatus) VALUES (@typeID, @userEmail, @userPW, @userFN, @userLN, @userPhone, @userStatus)"

此外,您必须在sql数据库中将主键设置为自动增量。