Как исправить COM-объект, который был отделен от его базового RCW, не может быть использован.
Здравствуйте, мне трудно решить эту проблему, я работаю с vs2017 и получаю доступ к своей базе данных. Я действительно не знаю, что здесь произошло.
У меня есть COMBOBOX, который отображает имя поля all category name из моей базы данных, и оттуда я могу удалить строку в своей базе данных, используя имя, отображаемое в combobox, но я столкнулся с этой ошибкой.
Ниже приведен мой код:
Private Sub cmbCategory_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbCategory.SelectedIndexChanged Using cons As New OleDb.OleDbConnection(conSTR) Dim rdr As OleDb.OleDbDataReader With cmd .Connection = cons .CommandText = "SELECT CategoryName, CatPercent FROM Category WHERE CategoryName = @cn" .Parameters.AddWithValue("cn", cmbCategory.Text) .Connection.Open() rdr = cmd.ExecuteReader If rdr.HasRows Then While rdr.Read() txtCategory.Text = rdr("CategoryName").ToString numCategory.Text = rdr("CatPercent") End While rdr.Close() .Connection.Close() Else MessageBox.Show("NO DATA FOUND", "CATEGORY", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) End If End With End Using End Sub
Исключение происходит в АФЕРЫ что удерживает мою связь с той, которую я выделил жирным шрифтом и подчеркнул выше. Я не знаю, что это значит.
Это происходит после того, как я выбираю в своем поле со списком имя, а затем удаляю его, а затем снова выбираю и пытаюсь удалить, но эта ошибка всплывает
COM object that has been separated from its underlying RCW cannot be used.
Что я уже пробовал:
Я думал, что это просто моя строка соединения, которая вызывает несколько соединений, но это было не так.
It occurs after I select in my combo box a name and then I delete it and then I select again and try to delete but this error pops up <pre>COM object that has been separated from its underlying RCW cannot be used.
Richard MacCutchan
Почему вы пытаетесь удалить один и тот же элемент более одного раза?
Сообщение об ошибке предполагает, что вы, возможно, пытаетесь получить доступ cons
из отдельного потока в вашем приложении.
Richard Deeming
Почему вы используете его повторно? OleDbCommand
пример cmd
Просто создайте новый экземпляр для каждой команды, которую вы хотите выполнить, и оберните его в Using
блок.rdr
также следует завернуть в Using
блок.
lelouch_vi 2
Я вижу.Спасибо, что обратили на это внимание. Ошибка действительно исчезла, но не могли бы вы объяснить немного больше о создании экземпляров cmd? Я подумал, что если я объявлю cmd как локальную переменную, то к ней не смогут получить доступ другие функции?