2016-01-12 4 views
-3

При запуске этого кода он возвращает ошибку. Я пытаюсь получить данные из моей формы ввода в моей базе данныхОшибка при вставке: Имя столбца или количество заданных значений не соответствует определению таблицы

Это схема таблицы:

CREATE TABLE [dbo].[Students] (
    [Id]  INT   IDENTITY (1, 1) NOT NULL, 
    [Name]  NVARCHAR (MAX) NOT NULL, 
    [Email] NVARCHAR (MAX) NOT NULL, 
    [Password] NVARCHAR (MAX) NOT NULL, 
    CONSTRAINT [PK_Students] PRIMARY KEY CLUSTERED ([Id] ASC) 
); 
con.Open(); 
SqlCommand cmd = con.CreateCommand(); 
cmd.CommandType = CommandType.Text; 
cmd.CommandText = "INSERT INTO Students VALUES ('"+TextBox1.Text+ "','" +TextBox2.Text+ "','" +TextBox3.Text+ "','" +TextBox4.Text+"')"; 
cmd.ExecuteNonQuery(); 
con.Close(); 
+2

Если ваша таблица имеет более 4 столбцов, вам необходимо включить столбцы, к которым относятся значения. Я не люблю ссылаться на w3schools как на источник, но у них есть короткий и краткий пример [как написать инструкцию INSERT] (http://www.w3schools.com/sql/sql_insert.asp) в обоих направлениях; включая конкретные столбцы и то, как вы делаете это без столбцов. – sab669

+0

Просьба указать определение таблицы! В противном случае перепишите инструкцию insert в «INSERT INTO reg» (column1, column2, column3, column4) VALUES («+ TextBox1.Text +» ',' '+ TextBox2.Text + "', '" + TextBox3.Text + "', '"+ TextBox4.Text +"') "и, наконец, пользовательские параметры. – Kami

+6

стоит упомянуть, что вы широко открыты для SQL-инъекции – Jonesopolis

ответ

4

Говоря INSERT INTO без перечисления имен полей, которые вы хотите Вставка в SQL предполагает, что вы вставляете значение для каждого поля в строке. Итак, если ваша таблица содержит более четырех столбцов, вы получите эту ошибку.

Если это вопрос, то вам просто необходимо указать, какие поля вы вставляете, то вам нужен оператор вставки в следующем формате:

INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country) 
VALUES ('Cardinal','Tom B. Erichsen','Skagen 21','Stavanger','4006','Norway') 

Пример выше from here.

Однако было бы лучше использовать параметризованный запрос.