none
MS-DTC, Sql Server et auto-commit RRS feed

  • Discussion générale

  • Je n'arrive pas à débrancher l'auto-commit pour un client Odbc / Native Client se connectant à Sql Server 2005 en utilisant MS-DTC.

    Voici 4 cas de figures pour éclaircissement en pseudo-code :

    1) Sans MS DTC.

    Il faut faire :

    1.1) SQLConnect().

    1.2) SQLSetConnAttr(hMaConnexion, SQL_ATTR_AUTOCOMMIT,SQL_AUTO_COMMIT_OFF,SQL_IS_UINTEGER);

    1.3) SQLEndTrans pour invalider la transaction.

    Cela fonctionne.

    2) Avec MS DTC sans code particulier.

    Il faut faire :

    2.1) DtcGetTransactionManager().

    2.2) SQLConnect();

    2.3) ITransactionDispenser::BeginTransaction().

    2.4) ITransaction::Abort() pour invalider.

    Mais les modifications reste en base. Donc cela ne fonctionne pas.

    3) Avec MS DTC avec SQLSetConnAttr.

    Il faut faire :

    3.1) DtcGetTransactionManager().

    3.2) SQLConnect();

    3.3) ITransactionDispenser::BeginTransaction().

    3.4) SQLSetConnAttr(hMaConnexion, SQL_ATTR_AUTOCOMMIT,SQL_AUTO_COMMIT_OFF,SQL_IS_UINTEGER);

    Erreur : une transaction distribuée est déjà en cours.

    4) Avec MS DTC avec SQLSetConnAttr - Bis.

    Il faut faire :

    4.1) DtcGetTransactionManager().

    4.2) SQLConnect();

    4.3) SQLSetConnAttr(hMaConnexion, SQL_ATTR_AUTOCOMMIT,SQL_AUTO_COMMIT_OFF,SQL_IS_UINTEGER);

    4.4) ITransactionDispenser::BeginTransaction().

    4.5) ITransaction::Abort() pour invalider.

    Mais les modifications reste en base. Donc cela ne fonctionne pas.

    Meme résultat si j'emploi SQLExecDirect(hMaConnexion,"SET IMPLICIT_TRANSACTIONS OFF",SQL_NTS) au lieu de SQLSetConnAttr(hMaConnexion, SQL_ATTR_AUTOCOMMIT,SQL_AUTO_COMMIT_OFF,SQL_IS_UINTEGER);

    Comment faire un Rollback avec MS DTC et Sql Server ?

    Merci pour votre aide.

    jeudi 8 février 2007 15:23