我希望用户输入显示的所有数据(数据库中的列),填写并提交。我无法使用
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();
如果有一列必须自动生成,你必须告诉你为哪一列给出的值,以便sql知道未提及的属性应该是自动生成的
也许您的联系人表“ID”列值重复器。例如:当前 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();
如果不起作用,请分享抛出的异常。
您在评论中分享的查询缺少一些逗号“,”。
那么
INSERT INTO tbl(Column1,Column2,Column3) values ('value1''value2'+','value3')
会给你同样的错误,因为你提到了 3 列,但只给出了 2 个值。