2012-02-22 4 views
1

Я пытаюсь вставить значения в базу данных Access с помощью параметризованных запросов:параметризованных запросов для вставки значений

private void button1_Click(object sender, EventArgs e) 
     { 
      if (validationcontrol()) 
      { 
       MessageBox.Show(cmbjobcode.SelectedValue.ToString()); 
       OleDbConnection oleDbConnection1 = new System.Data.OleDb.OleDbConnection(connString); 
       oleDbConnection1.Open(); 
       OleDbCommand oleDbCommand1 = new System.Data.OleDb.OleDbCommand("INSERT INTO quotationmastertable (quotationcode ,jobcode , jobpk , sillabordercharges , battabordercharges , driverpayment , rent , extra , total , discount , remark ,amount) Values (?,?,?,?,?,?,?,?,?,?,?,?) ", oleDbConnection1); 
       oleDbCommand1.Parameters.Add(txtquotationno.Text); 
       oleDbCommand1.Parameters.Add(cmbjobcode.Text); 
       oleDbCommand1.Parameters.Add(cmbjobcode.SelectedValue); 
       oleDbCommand1.Parameters.Add(int.Parse(txtsilabordercharges.Text)); 
       oleDbCommand1.Parameters.Add(int.Parse(txtbattacharges.Text)); 
       oleDbCommand1.Parameters.Add(int.Parse(txtdriverpayment.Text)); 
       oleDbCommand1.Parameters.Add(int.Parse(txtrent.Text)); 
       oleDbCommand1.Parameters.Add(int.Parse(txtextra.Text)); 
       oleDbCommand1.Parameters.Add(int.Parse(txttotal.Text)); 
       oleDbCommand1.Parameters.Add(int.Parse(txtdiscount.Text)); 
       oleDbCommand1.Parameters.Add(txtremark.Text); 
       oleDbCommand1.Parameters.Add(int.Parse(txtamount.Text)); 
       oleDbCommand1.CommandType = CommandType.Text; 
       oleDbCommand1.ExecuteNonQuery(); 
       oleDbConnection1.Close(); 
       MessageBox.Show(txtquotationno.Text); 

      } 
     } 

, но я получаю исключение в самой первой строке:

oleDbCommand1.Parameters.Add(txtquotationno.Text); 

Исключение составляет

OleDbParameterCollection принимает только ненулевые объекты типа OleDbParameter, а не объекты String.

Я новичок в программировании; может ли кто-нибудь помочь в указании моих ошибок?

ответ

4

Единственный параметр для объекта Add ожидает объект OleDBParameter. Вы просто передаете строки и данные.

Простое исправление будет использовать AddWithValue метод:

oleDbCommand1.Parameters.AddWithValue("?", txtquotationno.Text); 
oleDbCommand1.Parameters.AddWithValue("?", cmbjobcode.Text); 

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

0

Вы пытаетесь добавить строку в набор параметров. Попробуйте это (изменение OleDbType.VarChar, 50 к фактическому типу столбца данных в вашей БД

oleDbCommand1.Parameters.Add("@quot", OleDbType.VarChar, 50).Value = txtquotationno.Text; 

Смотрите MSDN для примера:. http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbparameter.aspx

Смежные вопросы