программа доступа к базе данных c # - PullRequest
0 голосов
/ 26 октября 2011
String strSql = "insert into BaseData (Item," + dataGridView1.Columns[3].Name + "," + dataGridView1.Columns[4].Name + ") values ('" + row.Cells[0].Value + "','" + row.Cells[3].Value + "','" + row.Cells[4].Value + "')";                        

objCmd = new OleDbCommand(strSql, lConn);  
objCmd.ExecuteNonQuery();

strSql = "select id from BaseData where Item = '" + row.Cells[0].Value + "' and " + dataGridView1.Columns[1].Name + " = '" + row.Cells[3].Value + "' And " + dataGridView1.Columns[2].Name + " = '" + row.Cells[4].Value + "'";

OleDbCommand command = new OleDbCommand(strSql, lConn);                           
OleDbDataReader reader = command.ExecuteReader();   
String id = "";   
while (reader.Read())
{  
  id = reader.GetString(0);
}    
reader.Close();

strSql = "insert into tranjaction (Base_id,quentity,price,other) values ('" + id + "' , ' " + row.Cells[2].Value + "','" + row.Cells[1].Value + "')";

objCmd = new OleDbCommand(strSql, lConn);  
objCmd.ExecuteNonQuery();

При запуске Microsoft Visual Studio возникает ошибка в строке 10. (ExecuteReader)

Ошибка здесь.

Необработанное исключениеТип 'System.Data.OleDb.OleDbException' произошел в System.Data.dll

Дополнительная информация: для одного или нескольких обязательных параметров не задано значение.

Как можно это исправитьошибка?.

Ответы [ 3 ]

2 голосов
/ 26 октября 2011

Либо ваши имена полей неверны (количество?), Либо это потому, что у вас есть несбалансированные поля с параметрами.Вы вставляете в 4 поля, но вы предоставляете только 3 значения.Вместо этого используйте параметры, это облегчит вашу жизнь.

Попробуйте изменить это на:

strSql = "insert into tranjaction (Base_id,quentity,price,other) values (@id , @quentity, @price, @other)";
using (OleDbCommand cmd = new OleDbCommand(sqlSql, IConn)) {
  cmd.Parameters.AddWithValue("@id", id);
  cmd.Parameters.AddWithValue("@quentity", row.Cells[2].Value);
  cmd.Parameters.AddWithValue("@price", row.Cells[1].Value);
  cmd.Parameters.AddWithValue("@other", other);  //  <- missing
  cmd.ExecuteNonQuery();
}
1 голос
/ 26 октября 2011

Когда я получал эту ошибку в прошлом, это всегда было из-за простой опечатки. Как и другие упоминали, похоже, что вы написали «количество» неправильно, что может быть частью проблемы.

1 голос
/ 26 октября 2011

В этой строке

strSql = "insert into tranjaction (Base_id,quentity,price,other) values ('" + id + "' , ' " + row.Cells[2].Value + "','" + row.Cells[1].Value + "')";

вы вставляете 4 значения (Base_id, quentity, price, other), но вы вставляете только 3 значения (id, row.Cells [2] .Value, row.Cells [1] .Value). Задание значения для other должно решить проблему.

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

...