System.Data.SqlClient.SqlException: имя столбца или количество предоставленных значений не соответствует определению таблицы

c# sql .net asp.net-mvc tsql

3611 просмотра

3 ответа

Я хочу, чтобы пользователь набрал все данные, которые отображаются (столбцы из базы данных), заполните их и отправьте. Я не могу получить Id и CompanyID для автоматического создания либо с HTML.HiddenForэлементом.

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();
        }
    }
}
Автор: Malphai Источник Размещён: 08.11.2019 11:06

Ответы (3)


1 плюс

Решение
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 знал, что атрибуты, которые не упомянуты, должны быть автоматически сгенерированы.

Автор: Road2PreSchool Размещён: 20.08.2016 10:10

0 плюса

Может быть, ваш повторитель значения столбца таблицы контактов «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();

или (если ваш столбец идентификатора таблицы имеет автоматическое увеличение, то)

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();
Автор: Valeh Mikayilzadeh Размещён: 20.08.2016 10:06

0 плюса

Попробуйте не посылать 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 значения. Надеюсь, я проясню.

Автор: Road2PreSchool Размещён: 20.08.2016 10:22
Вопросы из категории :
32x32