powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / про транзакцию
5 сообщений из 5, страница 1 из 1
про транзакцию
    #32472303
Echer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Данные из рекордсета читаются в элементы списков типа CObList. Приложение манипулирует данными из списков. А затем все это нужно выгрузить в базу и сделать это в рамках единой транзакции. Насколько корректно будет сделать это след. образом?
Код: 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.
25.
m_dbSiaop.BeginTrans();
for(<цикл по всем элементам связного списка>) {
	CString strCmd;		
	if(<проверка некоего поля из элемента списка>) {
		strCmd.Format(<формируем строку запроса с использованием
полей элементов списка>);
		TRY
		{
			m_dbSiaop.ExecuteSQL(strCmd);
		}
		CATCH(CDBException, e)
		{
			AfxMessageBox(e->m_strError);
			m_dbSiaop.Rollback();
			return;
		}
		END_CATCH
	}
	if(<проверяем еще одно поле>) {
		...аналогично предыдущему...
	}
}
for(<таким же образом проходим второй список>)
{
}
m_dbSiaop.CommitTrans();
...
Рейтинг: 0 / 0
про транзакцию
    #32472379
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>AfxMessageBox(e->m_strError);
>m_dbSiaop.Rollback();


Лучше наоборот

m_dbSiaop.Rollback();
AfxMessageBox(e->m_strError);

А в принципе, нормальный подход.
У меня в старых проектах так и сделано.
Правда, сейчас сливаю все в XML и скармливаю хп
...
Рейтинг: 0 / 0
про транзакцию
    #32472420
YuriAM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проясните пожалуйста
"сейчас сливаю все в XML и скармливаю хп"
...
Рейтинг: 0 / 0
про транзакцию
    #32472515
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
про транзакцию
    #32472544
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например, формирую хмльку такого типа

Код: plaintext
1.
2.
3.
4.
5.
<?xml version= "1 . 0 " encoding= "windows-1251 "?>
<ROOT>
<DS A= "1 " B= "123E-01 " />
<DS A= "2 " B= "345E-02 " />
<DS A= "3 " B= "678E-03 " />
</ROOT>


А это хп-шка

Код: 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.
CREATE PROCEDURE [dbo].[SomeSP]
 ...
 ,  @I_XML  text
AS
   set nocount on

   declare @XMLID int
   exec sp_xml_preparedocument @XMLID out, @I_XML

   declare @tXML table(A int primary key, B double precision)
   insert into @tXML
   select A,B from openxml(@XMLID,'/ROOT/DS', 1 )
   with(A int,B double precision)

   exec sp_xml_removedocument @XMLID

   begin tran

      insert into SomeTable1 select A, B from @tXML

      update SomeTable2 set Y = B
      from SomeTable2 inner join @tXML on X = A

 . . .
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / про транзакцию
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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