我正在使用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);
}
}
}
}
答案 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数据库中将主键设置为自动增量。