C#, Могу ли я вставить и удалить из таблицы SQL Server во время чтения
Все вполне в названии.
Я читаю результат SqlCommand
(который является запросом соединения таблиц table1 и table2).
using (SqlCommand cmd = new SqlCommand(sqlCommand, eve.Database))
{
using (SqlDataReader sdr = cmd.ExecuteReader())
{
//Performing some tasks
}
}
На самом деле в части "выполнение некоторых задач", я делаю некоторые INSERT
а также DELETE
на одной из моих таблиц соединения (мы поговорим о таблице 1, например).
В настоящее время я стажер в компании, код хорошо работает с небольшим количеством данных, но мой преподаватель говорит мне, что это не очень хорошая идея, потому что у меня могут быть некоторые проблемы чтения и записи в моей таблице из-за блокировок SQL Server,
Я бы добавил, что для запуска INSERT и DELETE я просто открываю новое соединение (поэтому я не использую основное) и выполняю ExecuteNonQuery()
вызов.
using (SqlConnection cnx = Piivo.Utils.Open(Configuration))
{
SqlCommand cmd = new SqlCommand(command, cnx);
cmd.ExecuteNonQuery();
}
2 ответа
Вы можете в том и только в том случае, если команда Select была полностью выполнена, но вы не можете вставить или удалить одну и ту же таблицу, если команда select все еще выполняется, поскольку они оба выполняют SqlCommand в определенной таблице, для которой требуется "одиночное" открытое соединение.
Известный факт, что я не могу проверить это на огромном наборе данных прямо сейчас, я должен буду защитить себя от этих блокировок. Я предполагаю, что мне придется сохранить результат моего SELECT в объект DataTable, закрыть мое соединение, и тогда я смогу безопасно вставлять и удалять. Однако у меня может быть много результатов в этом SELECT, я не уверен, будет ли это решение оптимальным, но у меня нет выбора.
Спасибо за объяснения.