私はこのエラーが発生し、私は何を間違っているのか分からない。下のコードはbackrgoundworkerにあります。クリップボードに基になるRCWから分離されたCOMオブジェクトは使用できません。 oledbで
コピー例外詳細:
はSystem.Runtime.InteropServices.InvalidComObjectExceptionは、基礎となるRCWから 分離されたHRESULT = -2146233049メッセージ= COMオブジェクトを使用することができないユーザコードによって 未処理でした。ソース= mscorlib
のStackTrace:System.Data.Common.UnsafeNativeMethods.IAccessor.ReleaseAccessorでSystem.StubHelpers.StubHelpers.StubRegisterRCWで (pThisオブジェクト) (のIntPtr hAccessor、のInt32 & pcRefCount)のSystem.Data.OleDbで 。 RowBinding.Dispose()System.Data.OleDb.OleDbCommand.ResetConnection()System.Data.OleDb.OleDbCommand.Disposeで で (ブール処分)にSystem.ComponentModel.Component.Disposeで ()AttendanceSystem.Studentで 。 frmNewStudent.bgwInsertStudent_DoWork センダ、DoWorkEventArgs e)in c:\ Users \ victorbaccaljr \ Desktop \ PROGRAM \ Event AttendaceSystem.ComponentModel.BackgroundWorker.WorkerThreadStart(オブジェクト 引数)のInnerExceptionのライン System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)に :システム\ AttendanceSystem \ AttendanceSystem \学生\のfrmNewStudent.cs
コード:
private void bgwInsertStudent_DoWork(object sender, DoWorkEventArgs e)
{
List<object> arg = (List<object>)e.Argument;
bool found = false;
using (OleDbConnection cnn = new OleDbConnection(ConfigurationManager.ConnectionStrings["db"].ConnectionString))
{
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.CommandText = "select top 1 * from [student info] where [email protected]";
cmd.Connection = cnn;
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@id", arg[0].ToString());
cnn.Open();
using (OleDbDataReader rdr = cmd.ExecuteReader())
{
rdr.Read();
if (rdr.HasRows)
{
found = true;
}
cnn.Close();
}
}
using(OleDbCommand cmd=new OleDbCommand())
{
if(found)
{
MessageBox.Show("Student ID already inserted.");
}
else
{
cmd.CommandText = "insert into [Student info] values(@id, @firstname, @lastname, @department, @address)";
cmd.Connection = cnn;
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@id", arg[0].ToString());
cmd.Parameters.AddWithValue("@firstname", arg[1].ToString());
cmd.Parameters.AddWithValue("@lastname", arg[2].ToString());
cmd.Parameters.AddWithValue("@department", arg[3].ToString());
cmd.Parameters.AddWithValue("@address", arg[4].ToString());
cnn.Open();
cmd.ExecuteNonQuery();
cnn.Close();
MessageBox.Show("Record inserted!");
this.DialogResult = DialogResult.OK;
}
}
}
}
'cnn.Close()'を呼び出さない – ASpirin
あなたの質問の中に実際のコードを投稿してください。画像を検索エンジンで見つけることは不可能ですので、イメージを使用しないでください。 – HimBromBeere
[基になるRCWから分離されたCOMオブジェクトは重複している可能性があります](https://stackoverflow.com/questions/2260990/com-object-that-has-been-separated-from-its-underlying- rcw-can not-be-used) –