列名或提供的值数与表定义不匹配 - .NET MVC

时间:2017-12-09 11:36:06

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

我目前正致力于.net MVC的最后一年项目。 当我打开Location_new(在LocationController中执行操作)并单击提交时,它会显示错误

  

列名或提供的值数与表不匹配   定义

  

描述:执行期间发生了未处理的异常   当前的网络请求。请查看堆栈跟踪了解更多信息   有关错误的信息以及它在代码中的起源。

     

异常详细信息:System.Data.SqlClient.SqlException:列名称或   提供的值的数量与表定义不匹配。

     

来源错误:

     

第22行:第23行:conn.Open();第24行:int   count = command.ExecuteNonQuery();第25行:conn.Close();   第26行:

     

源文件:C:\ Users \ Dev D \ Documents \ Visual Studio   2015 \ Projects \ MySafar \ MySafar \ Models \ DBUtility.cs专栏:24

Location.cs(查询的模型类)

public class Location
    {
        public int LocationID;
        public string LocationName;
        public string PhotoPath;
        public string Details;
        public string CityID;

        public int Insert()
        {
            string query = "Insert Location VALUES(@LocationName, @PhotoPath, @Details, @CityID)";
            List<SqlParameter> parameters = new List<SqlParameter>();
            parameters.Add(new SqlParameter("@LocationName", this.LocationName));
            parameters.Add(new SqlParameter("@PhotoPath", this.PhotoPath));
            parameters.Add(new SqlParameter("@Details", this.Details));
            parameters.Add(new SqlParameter("@CityID", this.CityID));

            return DBUtility.ModifyData(query, parameters);
        }

DBUtility.cs(数据库的模型类)

public class DBUtility
    {
        public static int ModifyData(String query, List<SqlParameter> parameter)
        {
            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=\"C:\\Users\\Dev D\\Documents\\Visual Studio 2015\\Projects\\MySafar\\MySafar\\App_Data\\MySafarDB.mdf\";Integrated Security=True";

            SqlCommand command = new SqlCommand();
            command.Connection = conn;

            command.CommandText = query;
            command.Parameters.AddRange(parameter.ToArray());

            conn.Open();
            int count = command.ExecuteNonQuery();
            conn.Close();

            return count;
        }

AdminController

public ActionResult Location_New()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Location_New_Submit()
        {
            Location l = new Location();
            l.LocationName = Request.Form["LocationName"];
            l.PhotoPath = Request.Form["PhotoPath"];
            l.Details = Request.Form["PhotoPath"];
            //l.CityID = Convert.ToInt32(Request.Form["CityID"]);
            l.CityID = Request.Form["CityID"];

            l.Insert();

            return RedirectToAction("Location_List");
        }

[HttpPost]
        public ActionResult Location_List()
        {
          return View();
        }

1 个答案:

答案 0 :(得分:0)

在语句中指定列,如果您有一个不指定值的标识字段,则会发生此错误。

而不是

string query = "Insert Location VALUES(@LocationName, @PhotoPath, @Details, @CityID)";

使用

string query = "Insert INTO Location(LocationName, PhotoPath, Details, CityID) VALUES(@LocationName, @PhotoPath, @Details, @CityID)";

只需确保将它们更改为您的实际列名称,我假设我的示例的参数名称之外的名称。