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は行動しないにも関わらず、表示されています何かを更新しています。
accdbは更新されていません。それはあなたがチェックする間違ったaccdbを開いているようだ.. –
私はかなり正しいaccdbを開いたと確信しています。私は自分のデータベースをチェックしており、更新されていません。 – NoobProgrammer