[英]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.