无法从 C#.NET 更新 Access 数据库文件
Posted
技术标签:
【中文标题】无法从 C#.NET 更新 Access 数据库文件【英文标题】:Can't Update Access database File From C#.NET 【发布时间】:2014-02-24 11:40:24 【问题描述】:我尝试使用 Visual C# 学习一些编码。我创建了一个用于添加和更新 Access 数据库的表单。
我可以成功添加到 Access 文件,但我无法更新它们。
我通过在互联网上的一些搜索编写了一个类似下面的代码,但我收到了这个错误:
ExecuteNonQuery 需要一个开放且可用的连接。连接的当前状态为关闭。
我的代码是:
public partial class form1 : Form
private OleDbConnection con;
private void btnUpDate_Click(object sender, EventArgs e)
string FirstName = txtFirstName.Text;
string Family = txtFamily.Text;
string City = txtCity.Text;
string approve = txtapprove.Text;
string OfficeNumber = txtOfficeNumber.Text;
string OfficialDossier = txtOfficialDossier.Text;
string Department = txtDepartment.Text;
string Organization = txtOrganization.Text;
OleDbConnection oleDBConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Data Source=F:\\Database.accdb");
string query = "UPDATE Sheet1 SET FirstName=@FirstName, Family=@Family, City=@City, approve=@approve, OfficeNumber=@OfficeNumber, OfficialDossier=@OfficialDossier, Department=@Department, Organization=@Organization WHERE OfficeNumber=@OfficeNumber";
//string query = "UPDATE aspnet_Users SET FirstName=@FirstName, Family=@Family, City=@City, approve=@approve, OfficeNumber=@OfficeNumber, OfficialDossier=@OfficialDossier, Department=@Department WHERE OfficeNumber=@OfficeNumber";
OleDbCommand cmd = new OleDbCommand(query, oleDBConn);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@OfficeNumber", OfficeNumber);
cmd.Parameters.AddWithValue("@OfficialDossier", OfficialDossier);
cmd.Parameters.AddWithValue("@FirstName", FirstName);
cmd.Parameters.AddWithValue("@Family", Family);
cmd.Parameters.AddWithValue("@City", City);
cmd.Parameters.AddWithValue("@approve", approve);
cmd.Parameters.AddWithValue("@Department", Department);
cmd.Parameters.AddWithValue("@Organization", Organization);
try
con.Open();
int result = cmd.ExecuteNonQuery();
if (result > 0)
MessageBox.Show("Success!");
else
MessageBox.Show("Sorry!");
catch (OleDbException)
MessageBox.Show("There is a problem!");
finally
con.Close();
我哪里错了?我不使用 DataSet 和 DataAdapter。有问题吗?
我正在使用 VS 2010
【问题讨论】:
【参考方案1】:问题 1:您尚未打开分配给 OleDbCommand
对象的 Connection 对象 oleDBConn
。
您已将oleDBConn
分配给 OleDbCommand 对象,如下所示:
OleDbCommand cmd = new OleDbCommand(query, oleDBConn);//here you have assigned oleDbConn
但您打开了不同的 ConnectionObject con
如下:
con.Open();
解决方案 1:
替换这个:您应该始终打开分配给OleDbCOmmand
对象的OleDbConnection
(oleDBConn) 对象。
con.Open();
有了这个:
oleDBConn.Open();
问题 2: 您创建了一个额外的连接对象 con
(在您的 btnUpDate_Click
函数之上)并且错误地使用了相同的对象。(打开和关闭错误的连接对象而不是正确的对象)
解决方案 2: 移除在 btnUpDate_Click
函数之上创建的额外连接对象,并将所有出现的 con
替换为 oleDBConn
。
完整代码:
try
oleDBConn.Open();
int result = cmd.ExecuteNonQuery();
if (result > 0)
MessageBox.Show("Success!");
else
MessageBox.Show("Sorry!");
catch (OleDbException ex)
MessageBox.Show("There is a problem!"+ex.ToString());
finally
oleDBConn.Close();
【讨论】:
@user3346389:你的意思是它一直在说sorry
?
是的!我正确地改变它。我不能假设出了什么问题!
@user3346389: 你能调试一下看看错误和异常信息吗?
抱歉无法调试!我仍然没有到达调试章节:)
因为我可以在数据库中添加新行,所以我认为错误必须是声明的字符串!但是我不专业! :)以上是关于无法从 C#.NET 更新 Access 数据库文件的主要内容,如果未能解决你的问题,请参考以下文章
c#.net MS Access数据库没有安装Access [重复]