在C#应用程序中更新MS Access数据库
本文关键字:MS Access 数据库 更新 应用程序 | 更新日期: 2023-09-27 17:57:45
提前感谢您的帮助或建议。
我在这里发现了许多与我的问题有关的帖子,但我很难找到我到底需要更改什么来解决从C#应用程序更新MS Access数据库的问题。所以,如果人们觉得这个帖子和其他帖子太相似,我深表歉意。
这是我的更新代码:
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=''DATA2'Nescot Students'Y13's0234438'dboCanada.accdb";
conn.Open();
string query = "UPDATE Products SET [Product_Name] = @ProName, [Product_Description] = @ProDes, [Standard_Cost] = @StaCos, [Category] = @Cat, [List_Price] = @LisPri WHERE ID = '" + Convert.ToInt16(lblID.Text) + "'";
OleDbCommand cmd = new OleDbCommand(query, conn) /*{ CommandType = CommandType.Text }*/;
cmd.Parameters.AddWithValue("@ProName", txtProducts.Text);
cmd.Parameters.AddWithValue("@ProDes", txtDescription.Text);
cmd.Parameters.AddWithValue("@StaCos", Convert.ToDecimal(txtPrice.Text));
cmd.Parameters.AddWithValue("@Cat", txtCat.Text);
cmd.Parameters.AddWithValue("@LisPri", Convert.ToDecimal(txtListPrice.Text));
int rowsAffected = cmd.ExecuteNonQuery();
conn.Close();
我确信我很快就要把这件事做好了,但我不知道接下来该怎么办。。。即将出现的错误是
'条件表达式中的数据类型不匹配。'
WHERE ID = '" + Convert.ToInt16(lblID.Text) + "'"
这是错误的。如果ID
列是数字列,则不需要使用单引号。
既然你为其他人添加了它,为什么不把它也作为一个参数添加呢?喜欢
..WHERE ID = @id;
cmd.Parameters.AddWithValue("@id", Convert.ToInt32(lblID.Text));
也可以使用using
语句来处理您的OleDbConnection
和OleDbCommand
。
string ConnString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=''DATA2'Nescot Students'Y13's0234438'dboCanada.accdb";
using(OleDbConnection conn = new OleDbConnection(ConnString ))
using(OleDbCommand cmd = conn.CreateCommand())
{
cmd.CommandText = @"UPDATE Products SET [Product_Name] = @ProName, [Product_Description] = @ProDes, [Standard_Cost] = @StaCos, [Category] = @Cat, [List_Price] = @LisPri WHERE ID = @id";
cmd.Parameters.AddWithValue("@ProName", txtProducts.Text);
cmd.Parameters.AddWithValue("@ProDes", txtDescription.Text);
cmd.Parameters.AddWithValue("@StaCos", Convert.ToDecimal(txtPrice.Text));
cmd.Parameters.AddWithValue("@Cat", txtCat.Text);
cmd.Parameters.AddWithValue("@LisPri", Convert.ToDecimal(txtListPrice.Text));
cmd.Parameters.AddWithValue("@id", Convert.ToInt32(lblID.Text));
conn.Open();
int rowsAffected = cmd.ExecuteNonQuery();
conn.Close();
}