c# - 无法从 C#.NET 更新 Access 数据库文件

标签 c# .net ms-access insert-update

我尝试使用 Visual C# 学习一些编码。我创建了一个用于添加和更新 Access 数据库的表单。

我可以成功添加到 Access 文件,但我无法更新它们。

我通过在互联网上的一些搜索写了一个类似下面的代码,但我得到了这个错误:

ExecuteNonQuery requires an open and available Connection. The connection's current state is closed.

我的代码是:

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:您没有打开分配给 OleDbCommand 对象的连接对象 oleDBConn

您已将 oleDBConn 分配给 OleDbCommand 对象,如下所示:

OleDbCommand cmd = new OleDbCommand(query, oleDBConn);//here you have assigned oleDbConn

但是您打开了不同的 ConnectionObject con,如下所示:

con.Open();

解决方案一:

替换此内容:您应该始终打开分配给 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();
}

关于c# - 无法从 C#.NET 更新 Access 数据库文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21986696/

相关文章:

c# - 将 system.array 对象转换为 int[] 字符串或其他类型的对象

.net - 将 API 与 MVC 项目分离

.NET 核心与 FakeItEasy

c# - Datagridview:如何从列表中获取 "typeconvert"属性

c# - Backgroundworker 内存泄漏和 "using"语句

c# - 在 WinForms 的 ListView 中显示当前/选定的项目

c# - 反射和泛型获取属性值

sql - 在 SELECT 查询中使用 SQL 别名语句

c# - 使用 C# 连接到 MS Access 2010

java - 插入按钮连接