c# - 我尝试注册时总是遇到此错误

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

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

System.Data.SqlClient.SqlException: Column name or number of supplied values does not match table definition.

型号:

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

最佳答案

如果您没有在插入语句中为用户表指定列,它希望您为所有列传递值

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

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

关于c# - 我尝试注册时总是遇到此错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47791560/

相关文章:

c# - 将 [][] 形式的数组转换为 [,] 的最聪明方法?

mysql - 如何获取最大日期行?

sql - 重新排序有序列表

sql - Multi-Tenancy 主键的最佳方法

c# - 将字符串解析为 float C#

.net - 从合约异常中删除语法

c# - 如何在 ASP .NET 的 configureServices 函数中获取连接字符串

c# - 可以将新类添加到现有的 dll 并将其更新到源文件

c# - 如何使用 async 和 await 正确处理

c# - 如何获得运行或段落的高度