简体   繁体   中英

ALTER TABLE in Access database from C#

I need to add datagridview data to a MS Access table, at the same time add a column into that table and update the column as well. please help me, I keep getting an error that says Syntax error in field definition and then says No value given for one or more required parameters.

private void button1_Click(object sender, EventArgs e)
    {
        string myConnectionString = " ";

        myConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:/Users/game/Desktop/3rd year/2nd Semester/INYM 328/EmployeeAttendanceRegister/EmployeeAttendanceRegister/EmployeeAttendanceRegister.accdb";
        OleDbConnection myConnection = new OleDbConnection(myConnectionString);

        string col1 = dataGridView1[0, dataGridView1.CurrentCell.RowIndex].Value.ToString();
        string col2 = dataGridView1[1, dataGridView1.CurrentCell.RowIndex].Value.ToString();
        string col3 = dataGridView1[2, dataGridView1.CurrentCell.RowIndex].Value.ToString();
        string col4 = dataGridView1[3, dataGridView1.CurrentCell.RowIndex].Value.ToString();
        string col5 = dataGridView1[4, dataGridView1.CurrentCell.RowIndex].Value.ToString();
        string col6 = dataGridView1[5, dataGridView1.CurrentCell.RowIndex].Value.ToString();
        string col7 = dataGridView1[6, dataGridView1.CurrentCell.RowIndex].Value.ToString();
        string myInsertQuery = "INSERT INTO Attendance VALUES('" + col1 + "','" + col2 + "','" + col3 + "','" + col4 + "','" + col5 + "','" + col6 + "','" + col7 + "')";

        OleDbCommand myCommand = new OleDbCommand(myInsertQuery);
        myCommand.Connection = myConnection;

        myConnection.Open();
        try
        {
            myCommand.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message.ToString());
        }
        myConnection.Close();
        {
            string myConn = " ";

            myConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:/Users/game/Desktop/3rd year/2nd Semester/INYM 328/EmployeeAttendanceRegister/EmployeeAttendanceRegister/EmployeeAttendanceRegister.accdb";
            OleDbConnection myCon = new OleDbConnection(myConn);

            string myInsert = "ALTER TABLE Attendance ADD COLUMN SignIn";
            OleDbCommand myCom = new OleDbCommand(myInsert);
            myCom.Connection = myCon;

            myCon.Open();
            try
            {
                myCom.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
            myCon.Close();
        }
        {
            string myString = " ";

            myString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:/Users/game/Desktop/3rd year/2nd Semester/INYM 328/EmployeeAttendanceRegister/EmployeeAttendanceRegister/EmployeeAttendanceRegister.accdb";
            OleDbConnection myConnect = new OleDbConnection(myString);
            string Insert = "UPDATE Attendance SET SignIn = '" + dateTimePicker1.Value + "'";

            OleDbCommand myComm = new OleDbCommand(Insert);
            myComm.Connection = myConnect;

            myConnect.Open();
            try
            {
                myComm.ExecuteNonQuery();

                MessageBox.Show("Successfully Signed IN");
                frmhomepage previousForm = new frmhomepage();
                previousForm.Show();
                this.Hide();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }

            myConnect.Close();
        }
    }

I keep getting an error that says Syntax error in field definition

That's probably because the ALTER TABLE statement

ALTER TABLE Attendance ADD COLUMN SignIn

does not specify the column type. Based on the UPDATE command that follows, you probably meant

ALTER TABLE Attendance ADD COLUMN SignIn DATETIME

However, there are other problems with your code, too:

  1. Why are you trying to ALTER TABLE after every button click? Once you've changed the structure of the [Attendance] table you don't need to do it again.

  2. You are trying to pass a date/time value delimited with single quotes ( ' ). Access SQL normally expects date/time values to be delimited with hash marks ( # ).

  3. Instead of "gluing SQL statements together" you should use parameterized queries to help you avoid delimiter problems (see above) and protect you from SQL Injection.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM