Когда юзер приступает к редактированию строки в ГридВью и нажимает кнопку "Правка", выполняется это
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Protected Sub GridView1_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles GridView1.RowEditing
If Not (IsNothing(Session("DedicadedTransaction"))) Then
Try
CType(Session("DedicadedTransaction"), SqlTransaction).Rollback()
Catch ex As Exception
End Try
End If
Session("DedicadedConnection") = New SqlConnection(Session("ConnectionString"))
CType(Session("DedicadedConnection"), SqlConnection).Open()
Session("DedicadedTransaction") = _
CType(Session("DedicadedConnection"), SqlConnection).BeginTransaction(IsolationLevel.RepeatableRead)
Session("DedicadedCommand") = New SqlCommand
CType(Session("DedicadedCommand"), SqlCommand).Connection = CType(Session("DedicadedConnection"), SqlConnection)
CType(Session("DedicadedCommand"), SqlCommand).Transaction = CType(Session("DedicadedTransaction"), SqlTransaction)
CType(Session("DedicadedCommand"), SqlCommand).CommandText = _
"select id_index from t_main where id_index=" + _
CType(sender, GridView).DataKeys(e.NewEditIndex).Value.ToString
Try
CType(Session("DedicadedCommand"), SqlCommand).ExecuteReader()
Catch ex As Exception
e.Cancel = True
End Try
End Sub
и блокирует, таким образом, запись от попыток редактирования другими юзерами.
Если юзер передумал, то нажимает кнопку отмена и выполняется это.
1.
2.
3.
Protected Sub GridView1_RowCancelingEdit(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCancelEditEventArgs) Handles GridView1.RowCancelingEdit
CType(Session("DedicadedTransaction"), SqlTransaction).Rollback()
End Sub
Если же юзер нажимает кнопку "Обновить"(Update), то должно выполниться это,
1.
2.
3.
4.
5.
Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView1.RowUpdating
e.Cancel = True
CType(Session("DedicadedCommand"), SqlCommand).CommandText = _
"update t_main set customer_info='Вася'where id_index=" + CType(sender, GridView).DataKeys(e.RowIndex).Value.ToString
CType(Session("DedicadedTransaction"), SqlTransaction).Commit()
End Sub
но вместо этого получается ругательство:
The transaction operation cannot be performed because there are pending requests working on this transaction.
Хотя, если выполнять все эти запросы непосредственно из SQL Management Studio, то все выполняется, без сообщений об ошибках.
Как правильно поступить с этой транзакцией?
А еще лучше: как ПРАВИЛЬНО блокировать запись на время редактирования посредством средств АДО-АСП.НЕТ?