无法从 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 数据库文件的主要内容,如果未能解决你的问题,请参考以下文章

Access 2007 - “无法更新;当前已锁定”

从关闭的 CSV 更新 MS Access 数据表而不导入

c#.net MS Access数据库没有安装Access [重复]

如何从 Web 更新 Access 数据库?

如何使用 DataAdapter.Update 方法同时更新 Access 数据库和 .NET DataSet 对象?

ASP.NET 从 SQL 切换到 Access DB 后,我无法让我的数据源/gridview 正常工作