簡體   English   中英

列名或提供的值數與表定義不匹配-.NET MVC

[英]Column name or number of supplied values does not match table definition - .NET MVC

我目前正在.net MVC中從事最后一年的項目。 當我打開Location_new(LocationController中的Action)並單擊Submit時,它顯示錯誤

列名或提供的值數與表定義不匹配。

說明:執行當前Web請求期間發生未處理的異常。 請查看堆棧跟蹤,以獲取有關錯誤及其在代碼中起源的更多信息。

異常詳細信息: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;
        }

管理員控制器

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

在語句中指定您的列,如果您有一個身份字段,而您不想為其指定值,則會發生此錯誤。

代替

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

采用

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

只需確保將其更改為您的實際列名,在我的示例中,我假設這些名稱均來自參數名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM