Требуется ли «Commit» при обновлении Oracle с asp.net? - PullRequest
2 голосов
/ 02 декабря 2008

У меня есть этот код

    protected void btnUpdateAddress_Click(object sender, EventArgs e)
    {
        sdsAddressComparison.Update();
    }

, который я использую для обновления базы данных оракула. Когда я запускаю обновление SQL-кода в SQL Navigator, мне нужно набрать «Commit» или нажать кнопку «commit».

Должен ли я кодировать в "Commit" где-то в ASP.NET? и если да, то как и где мне это сделать?

Ответы [ 5 ]

4 голосов
/ 02 декабря 2008

Обычно, нет, вам не нужен коммит.

Однако вы можете написать код для использования транзакции, а по завершении транзакции вы можете вызвать commit.

например. (Regular):

try {
        // Open connection
        dbConn.Open();
        //DB Update Code Here
    }
    catch (Exception ex) {
        throw;
    }
    finally {
        // Close database connection
        dbConn.Close();
    }

например. (Как транзакция):

try {
        // Open connection & begin transaction
        dbConn.Open();
        dbTran = dbConn.BeginTransaction();
        
        //DB Update Code Here
        // Commit transaction
        dbTran.Commit();
    }
    catch (Exception ex) {
        // Rollback transaction
        dbTran.Rollback();
        throw;
    }
    finally {
        // Close database connection
        dbConn.Close();
    }
3 голосов
/ 02 декабря 2008

По умолчанию ваш код ASP.Net и большинство других клиентских API-интерфейсов для баз данных (ODBC, OLE DB, JDBC и т. Д.) Работают в режиме автоматической фиксации. То есть каждый раз, когда оператор выполняется успешно, результат фиксируется. Если вы работаете в таком режиме по умолчанию, нет необходимости явно фиксировать ваше обновление.

С другой стороны, обычно достаточно много сказать о том, чтобы поместить ваши обновления в явные транзакции - если вам когда-либо придется выпустить несколько обновлений, чтобы сделать одно логическое изменение, режим автоматической фиксации по умолчанию - очень бедный Классическим примером здесь является то, что если вы обновляете учетную запись A для снятия 50 долларов, а затем обновляете учетную запись B для внесения 50 долларов, и в результате вы получаете две разные транзакции из-за включения автоматической фиксации, возможно, что первая транзакция будет успешной, в то время как другая транзакция не удалась, и система потеряла 50 долларов.

Таким образом, вы, как правило, хотите написать код, аналогичный тому, который продемонстрировал Брайан, где вы используете транзакции и выполняете явную фиксацию. Но по умолчанию вам это не нужно, и ваши обновления будут автоматически фиксироваться.

0 голосов
/ 03 декабря 2008

Автокоммит также доступен в SQL * Plus.

SET AUTOCOMMIT ON
SET AUTOCOMMIT OFF

или

SET AUTOCOMMIT 100

Используйте SHOW AUTOCOMMIT, чтобы увидеть текущие настройки.

Но ... я ненавижу эту настройку. Вы делаете обязательство в конце значимой единицы работы, а не на полпути.

0 голосов
/ 03 декабря 2008

Поведение, которое вы видите в SQL Navigator, вероятно, определяется настройкой параметров.

Я не использовал SQL Navigator , но я использую TOAD , который также разработан Quest Software. В диалоговом окне опций он находится в View-> Toad Options ..., затем в узле Oracle-> Transactions.

Есть следующие соответствующие настройки:

  • [] Фиксация после каждого оператора (флажок)

  • При закрытии соединения: (выбор радио)

    • () Фиксация
    • () Откат
    • () Запрашивать фиксацию / откат при обнаружении изменений, или обнаружение невозможно из-за отсутствия прав на dmbs_transaction.

Таким образом, вы можете изменить настройку, чтобы вам не нужно было нажимать кнопку фиксации (или вводить "commit"), но обычно это плохая практика, так как фиксация - это то, что вы должны явно делать (или явно откатывать) ).

0 голосов
/ 02 декабря 2008

Просто для пояснения ... Я не говорю о транзакциях SQL Server .... Я говорю об обновлениях Oracle, которые обычно требуют команды commit, когда я использую либо навигатор SQL, либо SQL Plus

Причина, по которой я публикую это, заключается в том, что я могу обновить эти данные в SQL Navigator, но они не обновляются при использовании ASP.NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...