Выполнение двух команд SQL приводит к тому, что одна из них не выполняется
Я сравниваю две таблицы и проверяю, существует ли файл по-прежнему в пути, который хранится в БД. Если файл не существует, то запись из 'Pruefdate_import', имеющая ведущий идентификатор, будет удалена, а также все связанные записи из второй таблицы с точно таким же идентификатором. Ведущая запись (которая всегда только одна) будет удалена, но вторая таблица остается нетронутой.
List<string> PDToDelete = new List<string>(); SqlConnection sqlConn = new SqlConnection("Server=" + config.DBHOST + ";Database=" + config.DBASE + ";User Id=" + config.DBUSER + ";Password=" + Decrypt(config.DBPASSWORD) + ";MultipleActiveResultSets=True"); sqlConn.Open(); SqlCommand checkIfFileExist = new SqlCommand("SELECT Pruefdatei FROM Pruefdatei_Import", sqlConn); SqlDataReader reader = checkIfFileExist.ExecuteReader(); if (reader.HasRows) while (reader.Read()) { string path = reader.GetString(0); FileInfo pruefDatei = new FileInfo(path); if (!pruefDatei.Exists) { PDToDelete.Add(path); } } reader.Close(); foreach (string entry in PDToDelete) { if (MessageBox.Show("Die Prüfdatei " + entry + " existiert nicht mehr. Sollen dazugehörige Datenbanksätze gelöscht werden?", "Löschen bestätigen", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { using (SqlCommand deleteEntriesFromDB_1 = new SqlCommand("DELETE FROM Pruefdatei WHERE Referenznummer = @PDN", sqlConn)) { SqlParameter pathParam = new SqlParameter("@PDN", entry); deleteEntriesFromDB_1.Parameters.Add(pathParam); //This one doesn't work deleteEntriesFromDB_1.ExecuteNonQuery(); } using (SqlCommand deleteEntriesFromDB_2 = new SqlCommand("DELETE FROM Pruefdatei_Import WHERE Pruefdatei = @PDN", sqlConn)) { SqlParameter pathParam2 = new SqlParameter("@PDN", entry); deleteEntriesFromDB_2.Parameters.Add(pathParam2); deleteEntriesFromDB_2.ExecuteNonQuery(); } } } sqlConn.Close();
Что я уже пробовал:
Я включил MARS и поместил операторы SQL в два отдельных использования.
0x01AA
а) это не имеет отношения к Марсу. Вы выполняете SQLs последовательно, и у них также нет результирующего набора.
Б.) есть ли исключения при отладке? Может быть, нарушение внешнего ключа? Или deleteEntriesFromDB_1 возвращает затронутые строки == 0?