[英]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.