Количество значений запроса и полей назначения не совпадают ошибки - PullRequest
5 голосов
/ 08 ноября 2011

Я получаю сообщение об ошибке при вставке данных в базу данных.

Ошибка:

«Количество значений запроса и полей назначения не совпадают».

Введите код:

OleDbConnection vconn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\Mutyyba\\Documents\\Database1.accdb");
vconn.Open();

string name = textBox1.Text;
string address = textBox3.Text;
int rollno = Convert.ToInt32(textBox2.Text);

string vquery = "insert into Table1 values(@vname,@vrollno,@vaddress)";

OleDbCommand vcomm = new OleDbCommand(vquery, vconn);
vcomm.Parameters.AddWithValue("@vname", name);
vcomm.Parameters.AddWithValue("@vrollno", rollno);
vcomm.Parameters.AddWithValue("@vaddress", address);

vcomm.ExecuteNonQuery();

MessageBox.Show("your record has been recorded sucessfully!");

vconn.Close();

Что я делаю не так?

Ответы [ 4 ]

4 голосов
/ 08 ноября 2011

Я думаю, вы просто пропустили несколько одинарных кавычек. Я вижу, вы заключили все параметры в одинарные кавычки, начинающиеся и заканчивающиеся. Смотри это

Еще одна вещь, когда вы передаете много параметров, подготовьте SqlCommand Object для параметров . См. msdn для получения более подробной информации.

Сделайте что-то вроде этого:

  SqlCommand comm = new SqlCommand("INSERT INTO table VALUES (@txtsno, @txtdesg, @txtbasic)", connection);

  comm.Parameters.AddWithValue("@txtsno", txtsno.Text.Trim());

  comm.Parameters.AddWithValue("@txtsno", txtdesg.Text.Trim());

  comm.Parameters.AddWithValue("@txtsno", txtbasic.Text.Trim());

Это было бы более понятно и не было бы склонно к SQL-инъекции.

3 голосов
/ 08 ноября 2011

Попробуйте использовать параметры для построения команды

   // Create the InsertCommand.
    command = new OleDbCommand(
        "INSERT INTO Customers (CustomerID, CompanyName) " +
        "VALUES (?, ?)", connection);
   // add parameters like below 
    command.Parameters.Add(
        "CustomerID", OleDbType.Char, 5, "CustomerID");
    command.Parameters.Add(
        "CompanyName", OleDbType.VarChar, 40, "CompanyName");
1 голос
/ 08 ноября 2011

Вам необходимо указать имена столбцов в SQL, или последовательность значений должна быть точно такой же (число и порядок) со схемой по умолчанию для таблицы

OleDbCommand cmd = new OleDbCommand("insert into real (name, symbol, date, red, redby, redsell, sbintrabuy, sbtr1, sbtr2, sbtr3, sbintersell, sbtr1, sbtr2, sbtr3, rstl, green) values('" + Name + "','" + Symbol + "','" + Date + "','" + Red + "','" + RedBuy + "','" + RedSell + "','" + SBIntraBuy + "','" + SBTR1 + "','" + SBTR2 + "','" + SBTR3 + "','" + SBIntraSell + "','" + SBTR1 + "','" + SBTR2 + "','" + SBTR3 + "','" + RSTL + "','" + Green + "');", con);

Заменить жирным шрифтомстолбцы с правильными именами, рекомендуется явно указывать имена столбцов.

Строковые значения должны быть в одинарных квотах

Обычно вы должны написатьsql вот так:

cmd.Parameters.Add ("var", System.Data.OleDb.OleDbType.VarChar);cmd.Parameters ["var"]. Value = 'somevalue';

В вашем sql должно быть что-то вроде: "вставить в реальные (column1) значения (@var)".

====

Я обновил ответ, как указано выше, надеюсь, он может решить вашу проблему.

0 голосов
/ 05 марта 2015
insert into Main values (28494,1,False,'Buto-asma  Sirop' , 'Buto-asma  Sirop', 3.99 , 'Syrup', 'ispani', ' ', ' ',0, '1',4988 )

решает эту проблему

...