Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Не работает Rollback в OleDbTransaction для VFPOLEDB.1 / 9 сообщений из 9, страница 1 из 1
01.09.2005, 21:52
    #33247189
GennadyK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает Rollback в OleDbTransaction для VFPOLEDB.1
DBF с OleDbProvider=VFPOLEDB.1
После "успешного" отката захожу в SUBID.DBF и вижу там неоткатившееся 1111, вместо исходного 1756. Может кто знает в чем дело.

Огромное спасибо!

Dim myConnection As New OleDbConnection("Provider=VFPOLEDB.1;" + _
"Data Source=C:\MACIR\Data;")
myConnection.Open()
Dim myCommand As OleDbCommand = myConnection.CreateCommand()
Dim myTrans As OleDbTransaction
' Start a local transaction
myTrans = myConnection.BeginTransaction(IsolationLevel.ReadCommitted)
' Assign transaction object for a pending local transaction
myCommand.Connection = myConnection
myCommand.Transaction = myTrans
Try
myCommand.CommandText = "UPDATE SUBID SET ID=1111"
myCommand.ExecuteNonQuery()
'Изначально ошибочная команда для выполнения Rollback:
myCommand.CommandText = "Insert into SUBID (ID) VALUES ('103')"
myCommand.ExecuteNonQuery()
myTrans.Commit()
Console.WriteLine("Both records are written to database.")
Catch e As Exception
Try
myTrans.Rollback()
Catch ex As OleDbException
If Not myTrans.Connection Is Nothing Then
Console.WriteLine("An exception of type " & ex.GetType().ToString() & _
" was encountered while attempting to roll back the transaction.")
End If
End Try
Console.WriteLine("An exception of type " & e.GetType().ToString() & _
"was encountered while inserting the data.")
Console.WriteLine("Neither record was written to database.")
Finally
myConnection.Close()
End Try
...
Рейтинг: 0 / 0
01.09.2005, 23:15
    #33247222
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает Rollback в OleDbTransaction для VFPOLEDB.1
Меня очень смущает данная строка:

Код: plaintext
1.
myTrans = myConnection.BeginTransaction(IsolationLevel.ReadCommitted)
VFP не поддерживает такие виды транзакций... Там все просто - BEGIN TRANSACTION and END TRANSACTION...

Или я что - то путаю...
...
Рейтинг: 0 / 0
02.09.2005, 00:06
    #33247265
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает Rollback в OleDbTransaction для VFPOLEDB.1
Вот пример с моего коммерческого сайта, немного запутано, но думаю, что Вы идею поймете:

Код: 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.
             Dim myTrans As OleDBTransaction = shopcartConn.BeginTransaction()
              cmd.connection=shopcartConn
              cmd.Transaction = myTrans
 
           Try
           
               cmd.ExecuteNonQuery()
               myTrans.Commit()
               lblasp.text="Your record has been added to basket."
           Catch m As Exception
            Try
               myTrans.Rollback()
               Catch ex As OleDBException
           If Not myTrans.Connection Is Nothing Then
             lblasp.text="An exception of type " & ex.GetType().ToString() & _
                        " was encountered while attempting to roll back the transaction."
            End If
           End Try

              lblasp.text="An exception of type " & e.GetType().ToString() & _
                    "was encountered while inserting the data. Your goods was not added to basket."
           Finally
               shopcartConn.Close()
           End Try
...
Рейтинг: 0 / 0
02.09.2005, 21:38
    #33249504
GennadyK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает Rollback в OleDbTransaction для VFPOLEDB.1
Спасибо, Сергей,
но все равно не работает. Может что с версиями?
Использую:
Microsoft OLE DB Provider for Visual FoxPro 9.0
VB.NET 2003
...
Рейтинг: 0 / 0
02.09.2005, 21:51
    #33249510
GennadyK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает Rollback в OleDbTransaction для VFPOLEDB.1
Если я правильно понимаю, главное не роллбэк, а коммит. Даже если оборвать программу после первого апдейта ничего не должно измениться в дбф файле. Но почему-то 1-й апдейт меняет файл выполняя myCommand.ExecuteNonQuery(). Где система хранит неподтвержденные данные и как транзакция коммитится? Серверной части ведь нет, как у SQL сервера.

Спасибо!
...
Рейтинг: 0 / 0
03.09.2005, 12:20
    #33249715
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает Rollback в OleDbTransaction для VFPOLEDB.1
GennadyKЕсли я правильно понимаю, главное не роллбэк, а коммит. Даже если оборвать программу после первого апдейта ничего не должно измениться в дбф файле. Но почему-то 1-й апдейт меняет файл выполняя myCommand.ExecuteNonQuery(). Где система хранит неподтвержденные данные и как транзакция коммитится? Серверной части ведь нет, как у SQL сервера.

Спасибо!
Я тут подумал и пришел к выводу, что Вы пытаетесь все сделать не правильно... Дело в том, что в FoxPro нет транзакций для свободных таблиц (эта возможность появилась только в версии 9.0, но она еще сыроватая и немного запутанная). Аналогично и в ADO.NET нет соответствующего механизма для поддержки транзакций в FoxPro...

Если использовать контейнер базы данных FoxPro - то в этом случае разработка баз данных мало отличается от SQL Server - Вы создаете хранимые процедуры, в кторых и выполняете как и в SQL Server явные BEGIN TRANSACTION/END TRANSACTION/COMMIT... В своих WEB проектах с базами данных FoxPro я использую хранимые процедуры в тех местах, где идет изменение в более чем двух местах. В этом случае все работает очень правильно и хорошо...

Извините, что не понял до конца Вашего вопроса, просто я давно перешел на Web Services - которые уже вызваются из под ASP.NET а сами Web Service написаны на самом FoxPro... Так что все получается очень дешево и очень сердито...

Good luck!
...
Рейтинг: 0 / 0
06.09.2005, 18:46
    #33254840
GennadyK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает Rollback в OleDbTransaction для VFPOLEDB.1
Сергей, огромное спасибо Вам за разъяснение.
Я уже начал писать свою поддержку транзакций через бэкап изменяемых файлов - благо эта конкретная задача позволяет.
...
Рейтинг: 0 / 0
06.09.2005, 22:44
    #33255059
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает Rollback в OleDbTransaction для VFPOLEDB.1
GennadyKСергей, огромное спасибо Вам за разъяснение.
Я уже начал писать свою поддержку транзакций через бэкап изменяемых файлов - благо эта конкретная задача позволяет.
В принципе для свободных таблиц я пошел по этому-же пути, даже писал репликации и Daemon's которые как MS SQL Server синхронизировали таблицы на разных серверах... Работет до сих пор, хотя и питания и сервера от жары уже несколько раз "падали"... Все зависит только от Вас.

Good luck!
...
Рейтинг: 0 / 0
08.09.2005, 20:15
    #33259856
GennadyK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает Rollback в OleDbTransaction для VFPOLEDB.1
И у меня уже все работает.

Спасибо
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Не работает Rollback в OleDbTransaction для VFPOLEDB.1 / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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