[英]I always get this error when I try to register
I'm using Asp.Net MVC and one of the functions of my program is to register and Login. 我正在使用Asp.Net MVC,我的程序的一个功能是注册和登录。 I always get this error when I try to register.
我尝试注册时总是收到此错误。
System.Data.SqlClient.SqlException: Column name or number of supplied values does not match table definition.
System.Data.SqlClient.SqlException:列名或提供的值数与表定义不匹配。
Model: 模型:
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; }
}
Controller: 控制器:
[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);
}
}
}
}
If you don't specify columns for users table in an insert statement it expects you to pass values for all the columns 如果未在insert语句中为users表指定列,则需要传递所有列的值
If you don't want to pass values for all the columns simply specify the column name for which you are providing values: 如果您不想为所有列传递值,只需指定要为其提供值的列名称:
INSERT INTO users (typeID, userEmail, userPassword, userFirstName,
userLastName, userPhone, userStatus)
VALUES (@typeID, @userEmail, @userPassword, @userFirstName,
@userLastName, @userPhone, @userStatus)
In you query for inserting, before VALUES you need to define the columns... 在查询插入时,在VALUES之前需要定义列...
Like this... 像这样...
string query = "INSERT INTO table (id,username,password,email) VALUES (@id, @username, @password, @email)";
EDIT: 编辑:
string query = "INSERT INTO table (typeID, userEmail, userPW, userFN, userLN, userPhone, userStatus) VALUES (@typeID, @userEmail, @userPW, @userFN, @userLN, @userPhone, @userStatus)"
Also, you must set your primary key to auto increment in the sql database. 此外,您必须在sql数据库中将主键设置为自动增量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.