0

人事部の従業員が新入社員に関するさまざまな情報をアクセスデータベースに入力できるようにするツールを作成しています(学術目的で)。ここまでで、レイアウトのセットアップが完了し (すぐにわかるように)、検証が行われ、作成した Access データベースを使用して dataGridView が設定されます。次に、送信 (挿入)、更新、削除の 3 つのボタンがあります。

PS: 更新しようとしているテーブルが巨大であることはわかっていますが、それが私たちのチームが決定したことです。

私のレイアウトの画像:

人事従業員ツール

送信と削除は機能しますが、更新はすべてのフィールドにデータが入力されている場合にのみ機能します。私が書いたコードは、EMPLOYEE_IDがcombo_boxで選択された値と等しいすべてのフィールドを更新しようとするため、1つのフィールドのみを更新しようとすると、「1つ以上の必須パラメーターに値が指定されていません」というエラーが表示されます. コンボボックスの値が選択されたときに左側のすべてのフィールドを自動入力することで、問題が解決すると思います。問題は、これを達成する方法がわからないということです。どんな助けでも感謝します!!

更新ステートメント。

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 メソッドが Parameters コレクションに null を追加しているため、このエラーが発生しています。必要なのは、代わりに 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 に答える