2017-07-11 53 views
1

我得到错误“System.Runtime.InteropServices.InvalidComObjectException:'已从其基础RCW分离的COM对象不能使用。只有当我在using块执行OleDbCommand对象与parametersOleDbCommand在使用块:已经从其基础RCW分离的COM对象不能使用

using (OleDbCommand comm = new OleDbCommand()) 
     { 
      comm.Connection = conn; 
      comm.CommandType = CommandType.Text; 
      string txt = "SELECT* FROM [ListForGroup] WHERE [email] = @email"; 
      comm.Parameters.Add("@email", OleDbType.VarWChar).Value = userEmail; 
      comm.CommandText = txt; 
      conn.Open(); 
      OleDbDataReader reader = comm.ExecuteReader(); 
      List<ListForGroups> list = returnLists(reader); 
      conn.Close(); 
      cmbSelectList.DataSource = list; 
      cmbSelectList.DisplayMember = "listName"; 
      cmbSelectList.ValueMember = "listForGroupsID"; 
     } 

有谁知道原因是什么。我可以解决它使用OleDbCommand对象与CommandText没有parameters但我读这是个坏主意。我想在using区块中做到这一点,以确保所有资源都将被释放。

回答

0

我解决了这个问题

using (OleDbConnection conn = new OleDbConnection(connString)) 
    { 
     OleDbCommand comm = new OleDbCommand(); 
     comm.Connection = conn; 
     comm.CommandType = CommandType.Text; 
     string txt = "SELECT* FROM [ListForGroup] WHERE [email] = @email"; 
     comm.Parameters.Add("@email", OleDbType.VarWChar).Value = userEmail; 
     comm.CommandText = txt; 
     conn.Open(); 
     OleDbDataReader reader = comm.ExecuteReader(); 
     List<ListForGroups> list = returnLists(reader); 

     cmbSelectList.DataSource = list; 
     cmbSelectList.DisplayMember = "listName"; 
     cmbSelectList.ValueMember = "listForGroupsID"; 
    } 

我不知道为什么我没有在括号创建OleDbConnection旁边using。另一种解决方法是在using区块后关闭connection

相关问题