powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Блокировка строки
1 сообщений из 1, страница 1 из 1
Блокировка строки
    #34368577
BrokenPot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда юзер приступает к редактированию строки в ГридВью и нажимает кнопку "Правка", выполняется это
Код: plaintext
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
и блокирует, таким образом, запись от попыток редактирования другими юзерами.

Если юзер передумал, то нажимает кнопку отмена и выполняется это.
Код: plaintext
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), то должно выполниться это,
Код: plaintext
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
но вместо этого получается ругательство:
Код: plaintext
The transaction operation cannot be performed because there are pending requests working on this transaction.
Хотя, если выполнять все эти запросы непосредственно из SQL Management Studio, то все выполняется, без сообщений об ошибках.

Как правильно поступить с этой транзакцией?

А еще лучше: как ПРАВИЛЬНО блокировать запись на время редактирования посредством средств АДО-АСП.НЕТ?
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Блокировка строки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]