繁体   English   中英

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

[英]Can't Update Access database File From C#.NET

我尝试学习一些使用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:您尚未打开分配给OleDbCommand对象的连接对象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:您已经在btnUpDate_Click函数的顶部创建了一个Extra连接对象con ,并且错误地使用了该对象(打开和关闭错误的连接对象而不是正确的连接对象)

解决方法2:删除之上创建额外的连接对象btnUpDate_Click功能和替换所有con与OCCURENCES 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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM