0

我正在创建一个工具,该工具将允许人力资源员工将有关新员工的各种信息输入到访问数据库中(用于学术目的)。到目前为止,我已经设置好布局(您很快就会看到),验证在一个地方,并且使用我创建的 Access 数据库填充了 dataGridView。然后我有 3 个按钮,提交(插入)、更新和删除。

PS:我知道我要更新的表格很大,但这是我们团队决定做的。

我的布局图像:

人力资源员工工具

提交和删除有效,但只有在所有字段都填充了数据时,更新才有效。我编写的代码尝试更新所有字段,其中 EMPLOYEE_ID 等于在组合框上选择的值,因此如果我尝试仅更新一个字段,我会收到一条错误消息,提示“没有为一个或多个必需参数提供值”。我认为通过在选择组合框的值时自动填充左侧的所有字段将解决我的问题。问题是我不知道如何做到这一点。任何帮助将不胜感激!!

更新声明。

private void cmdModify_Click(object sender, EventArgs e)
        {
            //Setting up Connection String
            string connectionString = GetConnectionString();

            string SqlString = "UPDATE Employee SET FIRST_NAME = @FirstName , LAST_NAME= @LastName, MIDDLE_NAME = @MiddleName, DATE_HIRED =@DateHired, WAGE_TYPE =@WageType, WAGE = @Wage, GENDER =@Gender, MARTIAL_STATUS =@MartialStatus, UNIT_NUMBER =@UnitNumber, STREET_NUMBER =@StreetNumber, STREET_NAME =@StreetName, CITY =@City, PROVINCE =@Province, POSTAL_CODE =@PostalCode, HOME_NUMBER =@HomeNumber, CELL_NUMBER =@CellNumber, JOB_TITTLE =@JobTittle, END_DATE=7/24/2013, DPT_NAME =@Department, NOTES =@Notes WHERE [EMPLOYEE_ID] = @EMPLOYEE_ID";

            using (OleDbConnection conn = new OleDbConnection(connectionString))
            {
                using (OleDbCommand cmd = new OleDbCommand(SqlString, conn))
                {
                    cmd.CommandType = CommandType.Text;
                    cmd.Parameters.AddWithValue("FirstName", txtFname.Text);
                    cmd.Parameters.AddWithValue("LastName", txtLname.Text);
                    cmd.Parameters.AddWithValue("MiddleName", txtMname.Text);
                    cmd.Parameters.AddWithValue("DateHired", dateTimePicker1.Text);
                    cmd.Parameters.AddWithValue("WageType", cmbType.SelectedItem);
                    cmd.Parameters.AddWithValue("Wage", txtWage.Text);
                    if (rbMale.Checked == true)
                    {
                        cmd.Parameters.AddWithValue("Gender", rbMale.Text);
                    }
                    else if (rbFemale.Checked == true)
                    {
                        cmd.Parameters.AddWithValue("Gender", rbFemale.Text);
                    }
                    cmd.Parameters.AddWithValue("MartialStatus", cmbStatus.SelectedItem);
                    cmd.Parameters.AddWithValue("UnitNumber", txtUnit.Text);
                    cmd.Parameters.AddWithValue("StreetNumber", txtStreetNo.Text);
                    cmd.Parameters.AddWithValue("StreetName", txtStreet.Text);
                    cmd.Parameters.AddWithValue("City", txtCity.Text);
                    cmd.Parameters.AddWithValue("Province", cmbState.SelectedItem);
                    cmd.Parameters.AddWithValue("PostalCode", txtPostal.Text);
                    cmd.Parameters.AddWithValue("HomeNumber", txtHphone.Text);
                    cmd.Parameters.AddWithValue("CellNumber", txtCphone.Text);
                    cmd.Parameters.AddWithValue("JobTittle", cmbJobTitle.SelectedItem);
                    cmd.Parameters.AddWithValue("Department", cmbDepartment.SelectedItem);
                    cmd.Parameters.AddWithValue("Notes", txtNotes.Text);
                    cmd.Parameters.AddWithValue("EMPLOYEE_ID", comboBox1.SelectedValue);

                    try
                    {
                        // openning a connection to the database / table
                        conn.Open();
                        // SQL commnd class
                        cmd.ExecuteNonQuery();
                        //Closing Database connection
                        conn.Close();
                        //Console.WriteLine("Data was added to the table !!!");
                        MessageBox.Show("Data was added to the table !!!");
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                        //Console.WriteLine(ex.Message); // printing exception message to default output
                    }
                }
            }
            Refresh();
            clearText();
        }

插入声明。

private void Insert_Data()
        {
            string connectionString = GetConnectionString();
            string SqlString = "INSERT INTO Employee (FIRST_NAME, LAST_NAME, MIDDLE_NAME, DATE_HIRED, WAGE_TYPE, WAGE, GENDER, MARTIAL_STATUS,UNIT_NUMBER, STREET_NUMBER, STREET_NAME, CITY ,PROVINCE, POSTAL_CODE, HOME_NUMBER, CELL_NUMBER, JOB_TITTLE, END_DATE, DPT_NAME, NOTES) VALUES (@FirstName,@LastName,@MiddleName,@DateHired,@WageType,@Wage,@Gender,@MartialStatus,@UnitNumber,@StreetNumber,@StreetName,@City,@Province,@PostalCode,@HomeNumber,@CellNumber,@JobTittle,7/24/2013,@Department,@Notes)";

            using (OleDbConnection conn = new OleDbConnection(connectionString))
            {
                using (OleDbCommand cmd = new OleDbCommand(SqlString, conn))
                {
                    cmd.CommandType = CommandType.Text;
                    cmd.Parameters.AddWithValue("FirstName", txtFname.Text);
                    cmd.Parameters.AddWithValue("LastName", txtLname.Text);
                    cmd.Parameters.AddWithValue("MiddleName", txtMname.Text);
                    cmd.Parameters.AddWithValue("DateHired", dateTimePicker1.Text);
                    cmd.Parameters.AddWithValue("WageType", cmbType.SelectedItem);
                    cmd.Parameters.AddWithValue("Wage", txtWage.Text);
                    if (rbMale.Checked == true)
                    {
                        cmd.Parameters.AddWithValue("Gender",rbMale.Text);
                    }
                    else if (rbFemale.Checked == true)
                    {
                        cmd.Parameters.AddWithValue("Gender", rbFemale.Text);
                    }
                    cmd.Parameters.AddWithValue("MartialStatus", cmbStatus.SelectedItem);
                    cmd.Parameters.AddWithValue("UnitNumber", txtUnit.Text);
                    cmd.Parameters.AddWithValue("StreetNumber", txtStreetNo.Text);
                    cmd.Parameters.AddWithValue("StreetName", txtStreet.Text);
                    cmd.Parameters.AddWithValue("City", txtCity.Text);
                    cmd.Parameters.AddWithValue("Province", cmbState.SelectedItem);
                    cmd.Parameters.AddWithValue("PostalCode", txtPostal.Text);
                    cmd.Parameters.AddWithValue("HomeNumber", txtHphone.Text);
                    cmd.Parameters.AddWithValue("CellNumber", txtCphone.Text);
                    cmd.Parameters.AddWithValue("JobTittle", cmbJobTitle.SelectedItem);
                    cmd.Parameters.AddWithValue("Department", cmbDepartment.SelectedItem);
                    cmd.Parameters.AddWithValue("Notes", txtNotes.Text);

                    try
                    {
                        // openning a connection to the database / table
                        conn.Open();
                        // SQL commnd class
                        cmd.ExecuteNonQuery();
                        //Closing Database connection
                        conn.Close();
                        //Console.WriteLine("Data was added to the table !!!");
                        MessageBox.Show("Data was added to the table !!!");
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                        //Console.WriteLine(ex.Message); // printing exception message to default output
                    }
                }
            }
            Refresh();
            clearText();
        }

删除声明

private void cmdDelete_Click_1(object sender, EventArgs e)
        {
            //Setting up Connection String
            string connectionString = GetConnectionString();
            string SqlString = "DELETE * FROM Employee WHERE [EMPLOYEE_ID] = @EMPLOYEE_ID ";

            using (OleDbConnection conn = new OleDbConnection(connectionString))
            {
                using (OleDbCommand cmd = new OleDbCommand(SqlString, conn))
                {
                    cmd.CommandType = CommandType.Text;
                    cmd.Parameters.AddWithValue("EMPLOYEE_ID", comboBox1.SelectedValue);
                    try
                    {
                        // openning a connection to the database / table
                        conn.Open();
                        // SQL commnd class
                        cmd.ExecuteNonQuery();
                        //Closing Database connection
                        conn.Close();
                        //Console.WriteLine("Data was added to the table !!!");
                        MessageBox.Show("Data was deleted from the table !!!");
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                        //Console.WriteLine(ex.Message); // printing exception message to default output
                    }
                }
            }
            Refresh();
            clearText();
        }
4

1 回答 1

1

您收到此错误是因为 AddWithValue 方法将 null 添加到 Parameters 集合。您需要的是添加 DBNull 来代替。

cmd.Parameters.AddWithValue("FirstName", txtFname.Text ?? DBNull.Value); 

如果它们是复杂类型,那些 SelectedItem 值也可能会给您带来问题:

cmd.Parameters.AddWithValue("省", cmbState.SelectedItem);

您可能必须在实例上指定一个属性才能使其工作

cmd.Parameters.AddWithValue("Province", cmbState.SelectedItem.MyIdProperty); 
于 2012-07-31T16:42:39.593 回答