Синтаксическая ошибка при вставке новой записи в базу данных Ms Access с помощью формы C # windows - PullRequest
0 голосов
/ 23 января 2019

У меня есть форма, в которой пользователь может вводить и выбирать из нескольких элементов управления, таких как выпадающий список, средства выбора даты, текстовые поля, флажки и т. Д. В случае нажатия кнопки я написал следующую процедуру, чтобы ВСТАВИТЬ новую запись в базе данных MS Access. : Код:

private void InsertNewRecord()
    {


        txtLastUpdated.Text = DateTime.Today.ToString();
        using (var conn = new OleDbConnection(MTSConn))

        {
            using (var cmd = conn.CreateCommand())

            {
                cmd.CommandText = @"Insert Into Incoming_T (DocFrom, CntrTeam, To, ReferenceNo, Subject, Review, Type, DocDate, RcvdDate, ProjectRef, DIMSNo, DIMSLink, SnrEng,    MailStatus, Comments, LogRegID, RegisteredBy, UpdatedBy, LastUpdated, ForInf, ForReview, ForApp, ForComnt, ForHndlng, ForAct) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,  ?, ?, ?, ?)";

                cmd.Parameters.Add(new OleDbParameter("?", OleDbType.VarChar, 100) { Value = cbxFrom.SelectedValue });
                cmd.Parameters.Add(new OleDbParameter("?", OleDbType.VarChar, 20) { Value = cbxTo.SelectedValue });
                cmd.Parameters.Add(new OleDbParameter("?", OleDbType.VarChar, 100) { Value = cbxTo.Text });
                cmd.Parameters.Add(new OleDbParameter("?", OleDbType.VarChar, 50) { Value = txtReference.Text });
                cmd.Parameters.Add(new OleDbParameter("?", OleDbType.VarChar, 200) { Value = txtSubject.Text });
                cmd.Parameters.Add(new OleDbParameter("?", OleDbType.VarChar, 1) { Value = cbxReview.Text });
                cmd.Parameters.Add(new OleDbParameter("?", OleDbType.VarChar, 10) { Value = cbxDocType.SelectedValue });
                cmd.Parameters.Add(new OleDbParameter("?", OleDbType.Date, 8) { Value = dtpDocDate.Value });
                cmd.Parameters.Add(new OleDbParameter("?", OleDbType.Date, 8) { Value = dtpRcvDate.Value });
                cmd.Parameters.Add(new OleDbParameter("?", OleDbType.VarChar, 20) { Value = cbxProject.SelectedValue });
                cmd.Parameters.Add(new OleDbParameter("?", OleDbType.VarChar, 15) { Value = txtDIMS.Text });
                cmd.Parameters.Add(new OleDbParameter("?", OleDbType.VarChar, 255) { Value = txtDIMLink.Text });
                cmd.Parameters.Add(new OleDbParameter("?", OleDbType.VarChar, 10) { Value = cbxSnrEngr.SelectedValue });
                cmd.Parameters.Add(new OleDbParameter("?", OleDbType.VarChar, 20) { Value = cbxStatus.Text });
                cmd.Parameters.Add(new OleDbParameter("?", OleDbType.VarChar, 255) { Value = txtComments.Text });
                cmd.Parameters.Add(new OleDbParameter("?", OleDbType.Integer, 4) { Value = Convert.ToInt32(txtRegID.Text) });
                cmd.Parameters.Add(new OleDbParameter("?", OleDbType.VarChar, 50) { Value = txtRegBy.Text });
                cmd.Parameters.Add(new OleDbParameter("?", OleDbType.VarChar, 50) { Value = txtUpdatedBy.Text });
                cmd.Parameters.Add(new OleDbParameter("?", OleDbType.Date, 8) { Value = Convert.ToDateTime(txtLastUpdated.Text) });
                cmd.Parameters.Add(new OleDbParameter("?", OleDbType.Boolean, 1) { Value = Convert.ToBoolean(chkInf.Checked) });
                cmd.Parameters.Add(new OleDbParameter("?", OleDbType.Boolean, 1) { Value = Convert.ToBoolean(chkRw.Checked) });
                cmd.Parameters.Add(new OleDbParameter("?", OleDbType.Boolean, 1) { Value = Convert.ToBoolean(chkApp.Checked) });
                cmd.Parameters.Add(new OleDbParameter("?", OleDbType.Boolean, 1) { Value = Convert.ToBoolean(chkComm.Checked) });
                cmd.Parameters.Add(new OleDbParameter("?", OleDbType.Boolean, 1) { Value = Convert.ToBoolean(chkHandl.Checked) });
                cmd.Parameters.Add(new OleDbParameter("?", OleDbType.Boolean, 1) { Value = Convert.ToBoolean(chkAct.Checked) });


                try
                {
                    conn.Open();

                    cmd.ExecuteNonQuery();
                    MessageBox.Show("Recored Inserted Successfully!");
                }
                catch (Exception ex)
                {

                    MessageBox.Show(ex.Message);
                }

            }
        }

    }

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

private void InsertNewRecord()
    {
        txtLastUpdated.Text = DateTime.Today.ToString();
        using (OleDbConnection conn = new OleDbConnection(MTSConn))

        {
            using (OleDbCommand cmd = new OleDbCommand())

            {
                .
                .
                .
            }
       } 

Моя форма выглядит так: enter image description here

Я что-то упустил?

1 Ответ

0 голосов
/ 23 января 2019

«Тип» - это зарезервированное слово в Access , поэтому вам нужно будет заключить его в квадратные скобки в запросе:

Insert Into Incoming_T (DocFrom, CntrTeam, To, ReferenceNo, Subject, Review, 
        [Type], DocDate, RcvdDate, ProjectRef, DIMSNo, DIMSLink, SnrEng,
        MailStatus, Comments, LogRegID, RegisteredBy, UpdatedBy, LastUpdated,
        ForInf, ForReview, ForApp, ForComnt, ForHndlng, ForAct) 
 VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,  ?, ?, ?, ?)";
...