0

我需要将datagridview数据添加到 MS Access 表中,同时在该表中添加一列并更新该列。请帮助我,我不断收到一条错误消息,提示字段定义中的语法错误,然后说没有为一个或多个必需参数提供值。

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();
        }
    }
4

1 回答 1

1

我不断收到一个错误,提示字段定义中的语法错误

那可能是因为 ALTER TABLE 语句

ALTER TABLE Attendance ADD COLUMN SignIn

不指定列类型。根据后面的 UPDATE 命令,您可能的意思是

ALTER TABLE Attendance ADD COLUMN SignIn DATETIME

但是,您的代码也存在其他问题:

  1. 为什么每次单击按钮后都尝试更改表?一旦你改变了 [Attendance] 表的结构,你就不需要再做一次了。

  2. 您正在尝试传递用单引号 ( ') 分隔的日期/时间值。Access SQL 通常要求日期/时间值用井号 ( #) 分隔。

  3. 而不是“将 SQL 语句粘合在一起”,您应该使用参数化查询来帮助您避免分隔符问题(见上文)并保护您免受 SQL 注入。

于 2013-09-19T01:49:35.183 回答