2016-01-09 3 views
0

У меня есть простое веб-приложение asp.net. У этого есть несколько пользователей, которые могут входить в систему и редактировать информацию. Тем не менее, я заметил, что пользователи одновременно обновляют информацию. Когда данные поступают в базу данных MS SQL, данные обмениваются данными.Как установить множественное редактирование данных в SQL Server от asp.net

Пример

UserA редактировал item1, в то время как UserB был редактирования item2. При обновлении информации он показывает, что UserA редактирует Item2.

На учетные данные для входа пользователя хранятся в сеансе

HttpContext.Current.Session.Add("Username", rs["Username"].ToString()); 

Код ниже используется для вызова процедуры в БД

using (SqlConnection con = new SqlConnection(dc.Con)) { 
    using (SqlCommand cmd = new SqlCommand("sp_EditItem", con)) { 
     cmd.CommandType = CommandType.StoredProcedure; 

     cmd.Parameters.Add("@ItemName", SqlDbType.VarChar).Value = txtItemInfo.Text; 
     cmd.Parameters.Add("@ItemID", SqlDbType.VarChar).Value = txtItemID.Text; 

     con.Open(); 
     cmd.ExecuteNonQuery(); 
    } 
} 

Запрос в процедуре

Update tb_Items 
set ItemName = @ItemName 
where ItemID = @ItemID 

Когда один пользователь обновляет данные, данные обновляются правильно.

Что заставляет данные заменять, когда несколько пользователей редактируют информацию?

+0

Что значит 'поменять местами' означает? – nicomp

+0

В этом контексте Interchanged. – Angwenyi

+0

Звук, который вам нравится, имеет общие переменные или ресурсы или при редактировании, что вы загружаете данные из элементов, которые не редактируются, или изъяны в вашей процедуре. –

ответ

0

Использование транзакций SQL и изменять код, как показано ниже

using (SqlConnection con = new SqlConnection(dc.Con)) { 
    using (SqlCommand cmd = new SqlCommand("sp_EditItem", con)) { 
     using (SqlTransaction transaction = connection.BeginTransaction("SampleTransaction")) 
     { 
      try 
      { 
       cmd.Transaction = transaction; 
       cmd.CommandType = CommandType.StoredProcedure; 

       cmd.Parameters.Add("@ItemName", SqlDbType.VarChar).Value = txtItemInfo.Text; 
       cmd.Parameters.Add("@ItemID", SqlDbType.VarChar).Value = txtItemID.Text; 

       con.Open(); 
       cmd.ExecuteNonQuery(); 
       transaction.Commit(); 
      } 
      catch (Exception ex) 
      { 
       transaction.Rollback(); 
      } 
     } 
    } 
} 
Смежные вопросы