簡體   English   中英

使用C#更新MS-Access數據庫中的記錄未知錯誤

[英]Updating a record in ms-access database using c# unknown error

我想使用c#從表單中更新ms-access數據庫中的記錄,但是當我單擊更新按鈕時沒有任何反應。 沒有錯誤,也沒有例外,這只是..它什么都不做。 我很困惑,幾乎發瘋,試圖找出問題所在。 請幫助我,我是C#的新手。

我的表單有四個文本框和按鈕(更新,添加,刪除和清除)和一個列表視圖。 到目前為止,我可以“添加”和“清除”了,“刪除”還沒有用,並且我目前在“更新”中遇到了麻煩。

該列表視圖充當一個表,在顯示我數據庫中某個雇員的名字和姓氏時,它不可見地保留了該雇員的ID(寬度0)。

每次從列表視圖中選擇一條記錄時,計算機都會獲得所選行的不可見ID號,並將在文本框中顯示與該ID相關的相應數據(名字,中間名,姓,地址,位置)

namespace WindowsFormsApp1
{


public partial class Form1 : Form
{

    string employeeID; //global variable 
    public void LvRefresh()
    {

        //this method is used to load records from the database
        //to the listview, it is also used to REFRESH the records of the listview.

        listView1.Items.Clear();
        listView1.View = View.Details;
        OleDbConnection con = new OleDbConnection();
        con.ConnectionString = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = C:\\Users\\genesis\\Documents\\Database1.accdb";
        con.Open();

        OleDbCommand cmdEmp = new OleDbCommand("Select ID,FN,LN from Employees", con);
        OleDbDataReader rdrEmp = cmdEmp.ExecuteReader();

        if (rdrEmp.HasRows)
        {

            while (rdrEmp.Read())
            {

                ListViewItem listitem = new ListViewItem(rdrEmp["ID"].ToString());
                listitem.SubItems.Add(rdrEmp["FN"].ToString());
                listitem.SubItems.Add(rdrEmp["LN"].ToString());
                listView1.Items.Add(listitem);

            }

        }
        con.Close();
        rdrEmp.Close();
        cmdEmp.Dispose();
    }



    public Form1()
    {

        InitializeComponent();
        LvRefresh(); //load the ID, FN, MN from the database to the listview
    }

    private void button2_Click(object sender, EventArgs e)
    {

        //clear the textboxes
        textADRS.Clear();
        textFN.Clear();
        textMN.Clear();
        textLN.Clear();
        textPOS.Clear();
    }

    private void buttonSUB_Click(object sender, EventArgs e)
    {

        //add records

        string Adrs = textADRS.Text;
        string Fname = textFN.Text;
        string Mname = textMN.Text;
        string Lname = textLN.Text;
        string Pos = textPOS.Text;

        try
        {

            OleDbConnection con = new OleDbConnection();
            con.ConnectionString = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = C:\\Users\\genesis\\Documents\\Database1.accdb";
            OleDbCommand cmd = new OleDbCommand("Insert into Employees (FN,MN,LN,[Address],[Position]) Values (@FirstName,@MidName,@LastName,@Address,@Position)", con);
            cmd.Parameters.Add(new OleDbParameter("@FirstName", Fname));
            cmd.Parameters.Add(new OleDbParameter("@MidName", Mname));
            cmd.Parameters.Add(new OleDbParameter("@LastName", Lname));
            cmd.Parameters.Add(new OleDbParameter("@Address", Adrs));
            cmd.Parameters.Add(new OleDbParameter("@Position", Pos));
            con.Open();
            cmd.ExecuteNonQuery();
            MessageBox.Show("Record Submitted", "Nice!");
            con.Close();
            cmd.Dispose();
            LvRefresh(); //refresh listview

        }

        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

    private void listView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        //codes that are responsible for the reflecting of records to the textboxes

        try
        {

            ListViewItem item = listView1.SelectedItems[0];
            employeeID = item.Text; //update the value of global variable employeeID
            textBox1.Text = employeeID;

            OleDbConnection con = new OleDbConnection();
            con.ConnectionString = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = C:\\Users\\genesis\\Documents\\Database1.accdb";
            con.Open();

            OleDbCommand cmdEmp = new OleDbCommand("Select * from Employees where ID = @empID", con);
            cmdEmp.Parameters.Add("@empID", employeeID);
            OleDbDataReader rdrEmp = cmdEmp.ExecuteReader();

            if (rdrEmp.HasRows)
            {

                while (rdrEmp.Read()) 
                {

                    textFN.Text = rdrEmp["FN"].ToString();
                    textMN.Text = rdrEmp["MN"].ToString();
                    textLN.Text = rdrEmp["LN"].ToString();
                    textADRS.Text = rdrEmp["Address"].ToString();
                    textPOS.Text = rdrEmp["Position"].ToString();

                }

            }
            con.Close();
            rdrEmp.Close();
            cmdEmp.Dispose();
        }

        catch (Exception)
        {

        }

    }

問題

    private void buttonUpdate_Click(object sender, EventArgs e)
    {
        string Adrs = textADRS.Text;
        string Fname = textFN.Text;
        string Mname = textMN.Text;
        string Lname = textLN.Text;
        string Pos = textPOS.Text;

        try
        {

            OleDbConnection con = new OleDbConnection();
            con.ConnectionString = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = C:\\Users\\genesis\\Documents\\Database1.accdb";
            con.Open();

            OleDbCommand cmdEmp = new OleDbCommand("Update Employees set FN = @FirstName, MN = @MidName, LN = @LastName, [Address] = @Address, [Position] = @Pos where ID = @empID", con);
            cmdEmp.Parameters.Add(new OleDbParameter("@empID", employeeID));
            cmdEmp.Parameters.Add(new OleDbParameter("@FirstName", Fname));
            cmdEmp.Parameters.Add(new OleDbParameter("@MidName", Mname));
            cmdEmp.Parameters.Add(new OleDbParameter("@LastName", Lname));
            cmdEmp.Parameters.Add(new OleDbParameter("@Address", Adrs));
            cmdEmp.Parameters.Add(new OleDbParameter("@Position", Pos));
            cmdEmp.ExecuteNonQuery();

            MessageBox.Show("Record Updated!", "Nice!");
            con.Close();
            cmdEmp.Dispose();
            LvRefresh(); //refresh listview
        }

        catch (Exception error)
        {
            MessageBox.Show(error.Message);
        }

    }
}
}

注意:盡管實際上沒有更新任何內容,但更新功能中的“記錄已更新”消息框已顯示。

按照它們在sql語句中出現的順序添加參數。 Access需要按出現的順序創建它們。

 OleDbCommand cmdEmp = new OleDbCommand("Update Employees set FN = @FirstName, MN = @MidName, LN = @LastName, [Address] = @Address, [Position] = @Pos where ID = @empID", con);
        cmdEmp.Parameters.Add(new OleDbParameter("@FirstName", Fname));
        cmdEmp.Parameters.Add(new OleDbParameter("@MidName", Mname));
        cmdEmp.Parameters.Add(new OleDbParameter("@LastName", Lname));
        cmdEmp.Parameters.Add(new OleDbParameter("@Address", Adrs));
        cmdEmp.Parameters.Add(new OleDbParameter("@Position", Pos));
        cmdEmp.Parameters.Add(new OleDbParameter("@empID", employeeID));
       cmdEmp.ExecuteNonQuery();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM