簡體   English   中英

System.Data.SqlClient.SqlException:列名或提供的值數與表定義不匹配

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

我希望用戶輸入顯示的所有數據(數據庫中的列),填寫並提交。 我無法使用HTML.HiddenFor元素獲取自動生成的Id和CompanyID。

System.Data.SqlClient.SqlException:列名或提供的值數與表定義不匹配。

模型:

namespace Project.Models
{
    public class Contact
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        public int Phone { get; set; }
        public int CompanyID { get; set; }
    }
}

視圖:

@model Project.Contact

<h2>Create Contact</h2>

@using (Html.BeginForm("Create", "Home", FormMethod.Post))
{
    <table>
        <tr>
            <th>First name</th>
            <th>Last name</th>
            <th>Email</th>
            <th>Phone</th>
        </tr>
        <tr>
            <td>@Html.HiddenFor(m => m.Id)</td>
            <td></td>
            <td>@Html.TextBoxFor(m => m.FirstName)</td>
            <td>@Html.TextBoxFor(m => m.LastName)</td>
            <td>@Html.TextBoxFor(m => m.Email)</td>
            <td>@Html.TextBoxFor(m => m.Phone)</td>
            <td>@Html.HiddenFor(m => m.CompanyID)</td>
        </tr>

    </table>
    <br />
    <input type="submit" name="btn" class="btn-primary" value="Create" />
}

控制器:

using Arbetsprov_Sublime___Andre_Kordasti.Models;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Web.Mvc;

namespace Arbetsprov_Sublime___Andre_Kordasti.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        [HttpGet]
        public ActionResult Create()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Create(Contact model)
        {
            var connection = new SqlConnection(@"Data Source=.\SQLExpress;Initial Catalog=Sublime;Integrated Security=True");
            connection.Open();

            var command = new SqlCommand("INSERT INTO Contact Values('" + model.Id + "','" + model.FirstName + " " + model.LastName + "','" + model.Email + " " + model.Phone + "','" + model.CompanyID + "')", connection);
            command.ExecuteNonQuery();

            return View();
        }
    }
}
var command = new SqlCommand("INSERT INTO Contact(Id,FirstName,LastName,Email,Phone,CompanyId) Values('" + model.Id + "','" + model.FirstName + " " + model.LastName + "','" + model.Email + " " + model.Phone + "','" + model.CompanyID + "')", connection);
command.ExecuteNonQuery();

如果有一個必須是autoGenerated的列,你必須告訴你給出哪個列的值,以便sql知道未提及的屬性應該是autoGenerated

也許你的聯系表“ID”列值轉發器。 例如:當前身份證已經有了

var command = new SqlCommand("INSERT INTO Contact (Id, FirstName, LastName, Email , Phone, CompanyID) Values('" + model.Id + "','" + model.FirstName + " " + model.LastName + "','" + model.Email + " " + model.Phone + "','" + model.CompanyID + "')", connection);
command.ExecuteNonQuery();

或者(如果你的表id列是自動遞增的話)

var command = new SqlCommand("INSERT INTO Contact (FirstName, LastName, Email , Phone, CompanyID) Values('" + model.FirstName + " " + model.LastName + "','" + model.Email + " " + model.Phone + "','" + model.CompanyID + "')", connection);
command.ExecuteNonQuery();

盡量不要將ID發送給它

var command = new SqlCommand("INSERT INTO Contact(FirstName,LastName,Email,Phone,CompanyId) Values("'"+ model.FirstName + "',' " + model.LastName + "','" + model.Email + "',' " + model.Phone + "','" + model.CompanyID + "')", connection);
command.ExecuteNonQuery();

如果它不起作用plz告訴我拋出的異常是相同的還是它改變了。

你正在使用的查詢,你發表我的評論有一些comass缺少','。

所以當你說的時候

INSERT INTO tbl(Column1,Column2,Column3) values ('value1''value2'+','value3')

它會給你同樣的錯誤,因為你提到了3列,但只給出了2個值。 希望我很清楚。

暫無
暫無

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

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