我正在尝试在 .NET 4.0 之上编写一个 Windows 窗体程序并访问 Microsoft Access 数据库。我可以毫无问题地读写,但有时会出现以下错误:
无法使用已与其底层 RCW 分离的 COM 对象。
我尝试使用不同的输入两次(在同一线程上)调用此方法(GetIDBasedonTeamName)。第二次运行时,我得到了那个错误。
OleDbConnection conn = new OleDbConnection();
OleDbConnection mDB = new OleDbConnection();
OleDbCommand comm = new OleDbCommand();
OleDbCommand cmd;
OleDbDataReader dr;
public void OpenConnection(string name) // always call this method first in other methods to initialise connection
{
conn.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;Data source="
+ Application.StartupPath + "\\AppData\\" + name + ".mdb;";
conn.Open();
comm.Connection = conn;
comm.Parameters.Clear();
}
public string GetIDBasedonTeamName(string teamName)
{
string toReturn = "";
try
{
OpenConnection("form");
comm.CommandText = "Select ID from TeamDetails WHERE TeamName=@teamName";
comm.Parameters.AddWithValue("TeamName", teamName);
dr = comm.ExecuteReader();
while (dr.Read())
{
toReturn = dr[0].ToString();
}
}
catch (OleDbException e)
{
string err = e.Message.ToString();
return null;
}
finally
{
}
conn.Close();
dr.Close();
return toReturn;
}
dr = comm.ExecuteReader(); 发生异常。
调用这个方法的方法里面有这 2 行:
InfoConfig.team1id = Convert.ToInt32(dbm.GetIDBasedonTeamName(cbxTeam1.Text)); InfoConfig.team2id = Convert.ToInt32(dbm.GetIDBasedonTeamName(cbxTeam2.Text));
可能是什么原因?我四处阅读,他们提到不要使用不同的线程,但这里是同一个线程。
谢谢,郭红