![](/img/trans.png)
[英]Dapper ExecuteAsync get a SQLException: Column name or number of supplied values does not match table definition
[英]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.