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, я не уверен, будет ли это решение оптимальным, но у меня нет выбора.

Спасибо за объяснения.

Другие вопросы по тегам