2017-06-25 9 views
0

ms-accessデータベースのレコードをC#でフォームから更新したいのですが、更新ボタンをクリックしても何も起こりません。エラーも例外もなく、まったく...何もしません。私は困惑し、何が間違っているのか理解しようと怒っている。私を助けてください、私はC#の初心者です。c#unknownエラーを使用してms-accessデータベースのレコードを更新する

私のフォームには、4つのテキストボックスとボタン(更新、追加、削除、クリア)とリストビューがあります。これまでのところ、「追加」と「クリア」があり、「削除」はまだ機能していません。現在、「更新」に問題があります。

listviewはテーブルとして機能し、従業員のID(幅0)を保持し、データベースから従業員の名と姓を表示します。

リストビューからレコードが選択されるたびに、コンピュータは選択された行の不可視ID番号を取得し、そのIDに対応するデータをテキストボックスに表示します(firstname、middlename、lastname、address、position )

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) 
     { 

     } 

    } 

PROBLEM

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

    } 
} 
} 

注:UPDATEの機能性の "RECORD UPDATED" MESSAGEBOXは行動しないにも関わらず、表示されています何かを更新しています。

+0

accdbは更新されていません。それはあなたがチェックする間違ったaccdbを開いているようだ.. –

+0

私はかなり正しいaccdbを開いたと確信しています。私は自分のデータベースをチェックしており、更新されていません。 – NoobProgrammer

答えて

1

パラメータを、SQL文に表示される順序で追加します。アクセスには、表示された順序で作成する必要があります。

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(); 
+0

ありがとうございます!私はC#とアクセスに新しいです、これを知らなかった。 – NoobProgrammer

関連する問題