Я пытаюсь удалить записи из таблицы базы данных SQL Server, передав несколько значений в виде строки с запятой, используя приведенный ниже запрос, и метод ado.net ExecuteNonQuery()
. Здесь я передаю имя таблицы, имя столбца и значения, разделенные запятыми.Удаление записей путем передачи значений, разделенных запятыми SQL Server & C#
string delQuery = "DELETE FROM " + delTblName +
" WHERE " + delColumnName + " IN (" + toDel+ ")";
Процесс удаления является успешным, если полный список значений в toDel
не имеет никаких проблем. Предположим, что если есть конфликт с внешним ключом с любым значением, весь оператор будет завершен, и никакие записи не будут удалены.
Поскольку количество элементов в переменной toDel
велико, я не могу использовать последовательную обработку, а также не могу использовать хранимую процедуру в соответствии с требованием.
Мне нужно удалить на основе успешных элементов и вернуть ошибочные из этого метода. Любая помощь будет оценена по достоинству.
Используется следующий код с помощью параметров
try
{
using (var sc = new SqlConnection(dbConnString))
using (var cmd = sc.CreateCommand())
{
sc.Open();
cmd.CommandText = "DELETE FROM @delTblName WHERE @delColumnName IN (@valConcat) ";
cmd.Parameters.AddWithValue("@delTblName", tblName);
cmd.Parameters.AddWithValue("@delColumnName", delColumnName);
cmd.Parameters.AddWithValue("@valConcat", nosConcat);
cmd.CommandType = CommandType.Text;
rowsAffected = rowsAffected + cmd.ExecuteNonQuery();
}
}
catch
{
}
получил эту ошибку - Необходимо объявить табличную переменную «@delTblName».
Используйте [параметризованных запросов] (http://blog.codinghorror.com/give-me-parameterized-sql-or-give- я-смерть /), и вам хорошо идти. –
Пробовал, но получал ошибку, потому что я хочу создать динамический запрос, передав имя таблицы также в качестве параметра. Также я хочу получить значение ошибки, полученное из предложения IN (toDel). – ByteCruncher
Можете ли вы показать нам параметризованный код и соответствующее сообщение об ошибке? –