Параметризованный запрос для вставки значений - PullRequest
2 голосов
/ 22 февраля 2012

Я пытался вставить значения в базу данных 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.

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

Ответы [ 2 ]

4 голосов
/ 22 февраля 2012

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

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

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

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

0 голосов
/ 22 февраля 2012

Вы пытаетесь добавить строку в набор параметров.Попробуйте это (изменив 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

...