|
|
|
Не работает Rollback в OleDbTransaction для VFPOLEDB.1
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2005, 21:52 |
|
||
|
Не работает Rollback в OleDbTransaction для VFPOLEDB.1
|
|||
|---|---|---|---|
|
#18+
Меня очень смущает данная строка: Код: plaintext 1. Или я что - то путаю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2005, 23:15 |
|
||
|
Не работает Rollback в OleDbTransaction для VFPOLEDB.1
|
|||
|---|---|---|---|
|
#18+
Вот пример с моего коммерческого сайта, немного запутано, но думаю, что Вы идею поймете: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2005, 00:06 |
|
||
|
Не работает Rollback в OleDbTransaction для VFPOLEDB.1
|
|||
|---|---|---|---|
|
#18+
Спасибо, Сергей, но все равно не работает. Может что с версиями? Использую: Microsoft OLE DB Provider for Visual FoxPro 9.0 VB.NET 2003 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2005, 21:38 |
|
||
|
Не работает Rollback в OleDbTransaction для VFPOLEDB.1
|
|||
|---|---|---|---|
|
#18+
Если я правильно понимаю, главное не роллбэк, а коммит. Даже если оборвать программу после первого апдейта ничего не должно измениться в дбф файле. Но почему-то 1-й апдейт меняет файл выполняя myCommand.ExecuteNonQuery(). Где система хранит неподтвержденные данные и как транзакция коммитится? Серверной части ведь нет, как у SQL сервера. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2005, 21:51 |
|
||
|
Не работает Rollback в OleDbTransaction для VFPOLEDB.1
|
|||
|---|---|---|---|
|
#18+
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! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2005, 12:20 |
|
||
|
Не работает Rollback в OleDbTransaction для VFPOLEDB.1
|
|||
|---|---|---|---|
|
#18+
Сергей, огромное спасибо Вам за разъяснение. Я уже начал писать свою поддержку транзакций через бэкап изменяемых файлов - благо эта конкретная задача позволяет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2005, 18:46 |
|
||
|
Не работает Rollback в OleDbTransaction для VFPOLEDB.1
|
|||
|---|---|---|---|
|
#18+
GennadyKСергей, огромное спасибо Вам за разъяснение. Я уже начал писать свою поддержку транзакций через бэкап изменяемых файлов - благо эта конкретная задача позволяет. В принципе для свободных таблиц я пошел по этому-же пути, даже писал репликации и Daemon's которые как MS SQL Server синхронизировали таблицы на разных серверах... Работет до сих пор, хотя и питания и сервера от жары уже несколько раз "падали"... Все зависит только от Вас. Good luck! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2005, 22:44 |
|
||
|
|

start [/forum/topic.php?fid=17&msg=33247222&tid=1353625]: |
0ms |
get settings: |
5ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
69ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 371ms |

| 0 / 0 |
