rashmi singhai Ответов: 2

Возникает ошибка, что количество значений запроса и полей назначения не совпадают.


кон = новый объект oledbconnection("поставщик = Майкрософт.Джет.Oledb для.4.0; Источник Данных = E:\\Sohkidatabase\\xyz.accdb");
против.Открыть();

ком.Подключение = кон;
ком.CommandType = CommandType. Text;

ком.CommandText = " вставить в Tbl_challanNo values(@good_desc,@quantity,@taaff_class,@Identification,@estimated,@date_of_issue,@nature_of_procesing,@factory,@Expdur_proc,@Place,@date)";
ком.Параметры.Четкий();
ком.Параметры.AddWithValue ("@good_des", txt_goods. Text);
ком.Параметры.AddWithValue ("@quantity", txt_quant.Текст);
ком.Параметры.AddWithValue ("@taaff_class", txt_tariff. Text);
ком.Параметры.AddWithValue ("@Identification", txt_ident. Text);
ком.Параметры.AddWithValue ("@estimated", txt_estval. Text);
ком.Параметры.AddWithValue ("@date_of_issue", dateTimePicker_issue.Ценность.ToShortDateString());
ком.Параметры.AddWithValue ("@nature_of_procesing", txt_natproc. Text);
ком.Параметры.AddWithValue ("@factory", txt_fact. Text);
ком.Параметры.AddWithValue ("@Expdur_proc", txt_durprocess. Text);
ком.Параметры.AddWithValue ("@Place", txt_place. Text);
ком.Параметры.AddWithValue ("@date", dateTimePicker1.Value.ToShortDateString());

if (con. State == ConnectionState.Закрытый)
против.Открыть();
ком.Метод executenonquery();
против.Закрывать();
Система.Окна.Форм.Функции MessageBox.Show ("Recrod Successfully Created");


в моей таблице (ms access)
идентификатор, используемый в качестве первичного ключа
1) удостоверение личности
2)goods_desc
'
'
'12) Дата

Что я уже пробовал:

я использовал msaccess db и обнаружил, что количество значений запроса и полей назначения не совпадают.

2 Ответов

Рейтинг:
20

F-ES Sitecore

Количество полей в таблице, которую вы вставляете, не соответствует количеству параметров, поэтому он не может сопоставить параметры с полями. Чтобы помочь с этими проблемами всегда говорите в какие поля вы вставляете;

вставить в tablename (field1, field2) значения (@value1, @value2)


rashmi singhai

спасибо теперь это работает

Рейтинг:
11

OriginalGriff

Когда вы выполняете анонимную операцию вставки, вы предполагаете количество и порядок полей в таблице базы данных.

INSERT INTO MyTable VALUES (...)
Это плохо, потому что это означает, что изменения в вашей БД могут не быть обнаружены в вашем коде, и в результате вы можете получить БД, которая безнадежно повреждена. А если у вас есть поле IDENTITY, то вы получите ошибку, потому что БД попытается вставить в него и пожаловаться.
Всегда перечисляйте столбцы в том порядке, в котором вы пытаетесь вставить:
INSERT INTO MyTable (Col1, Col2, Col3) VALUES (@forCol1, @forCol2, @forCol3)
и эта проблема уходит.
В вашем конкретном случае вы вставляете 11 значений, но БД не думает, что в базе данных так много столбцов. table...so убедитесь, что вы используете правильное имя таблицы!

Кроме того, не преобразуйте значения DateTime в строки для передачи их в БД - передайте их как DateTime, иначе вы рискуете получить дополнительные осложнения, когда система попытается преобразовать строку даты обратно в DateTime для вставки значения. Он не знает, в каком формате находится ваша дата, поэтому может ошибиться и (например) поменять местами день и месяц. Отправьте значение DateTime напрямую, и эта проблема тоже не возникнет.


rashmi singhai

спасибо это работает

OriginalGriff

Пожалуйста!