Удалить в oracle 10g с веб-сайта asp.net - дождаться подтверждения?

Мне нужно удалить данные в базе данных oracle 10g с веб-сайта ASP.NET 2.0.

Метод DeleteMonthPlan, который я использую при выполнении команды удаления. Проблема в том, что эта команда выполняется долгое время «в браузере» и, наконец, команда удаления не выполняется. Может быть, он ждет фиксации? В чем корень проблемы?

Эта команда SQL DELETE C_PPC_PLAN WHERE MFG_MONTH='VALUE' в порядке.

Тип столбца MFG_MONTH — VARCHAR2(16)

Сначала мне нужно вызвать метод DeleteMonthPlan, а затем мне нужно вызвать InsertDatePlan.

    private static void DeleteMonthPlan(string monthIndex)
    {
        try
        {
            using (var conn = new OracleConnection(GenerateConnectionString()))
            {
                conn.Open();

                var cmd = conn.CreateCommand();

                cmd.CommandText = string.Format("DELETE C_PPC_PLAN WHERE MFG_MONTH='{0}'", monthIndex);

                cmd.ExecuteNonQuery();
            }
        }
        catch (Exception exception)
        {

            throw exception;
        }
    }

Например, этот метод я использую для вставки, и это нормально.

    public void InsertDatePlan(DatePlan dp, 
        string monthIndex)
    {
        DeleteMonthPlan(monthIndex);
        try
        {
            using (var conn = new OracleConnection(GenerateConnectionString()))
            {
                conn.Open();

                var cmd = conn.CreateCommand();

                cmd.Parameters.Add(":Site", OracleType.VarChar).Value = dp.Site;
                cmd.Parameters.Add(":Week", OracleType.VarChar).Value = dp.MfgWeek;
                cmd.Parameters.Add(":Month", OracleType.VarChar).Value = dp.MfgMonth;
                cmd.Parameters.Add(":Year", OracleType.VarChar).Value = dp.MfgYear;
                cmd.Parameters.Add(":Input", OracleType.Number).Value = dp.Input;
                cmd.Parameters.Add(":Output", OracleType.Number).Value = dp.Output;
                cmd.Parameters.Add(":LMUser", OracleType.VarChar).Value = dp.LmUser;
                cmd.Parameters.Add(":PartNo", OracleType.VarChar).Value = dp.PartNo;
                cmd.Parameters.Add(":PartNoDesc", OracleType.VarChar).Value = dp.PartNoDesc;


                cmd.CommandText = string.Format("INSERT INTO C_PPC_PLAN (CREATE_TIME, SITE, MFG_DAY,MFG_WEEK,MFG_MONTH,MFG_YEAR,INPUT,OUTPUT,LM_TIME,LM_USER,PART_NO,PART_NO_DESC)"
                            + " VALUES (to_date('{0}', 'dd-mm-yyyy hh24:mi:ss'), :Site ,to_date('{1}', 'dd-mm-yyyy hh24:mi:ss'),:Week,"
                            + ":Month,:Year,:Input,:Output,to_date('{2}', 'dd-mm-yyyy hh24:mi:ss'),:LMUser,:PartNo,:PartNoDesc)"
                            , dp.CreateTime, dp.MfgDate, dp.LmTime);

                cmd.ExecuteNonQuery();

            }
        }
        catch (Exception exception)
        {

            throw exception;
        }
    }

Я попытался использовать транзакцию. Я вызываю этот метод внизу, но никогда не заканчиваю, это означает, что часть

trans.Rollback(); or conn.Close(); никогда не выполняется.

    private static void DeleteMonthPlan(string monthIndex)
    {
        var conn = new OracleConnection(GenerateConnectionString());
        conn.Open();

        OracleCommand cmd= conn.CreateCommand();

        OracleTransaction trans = conn.BeginTransaction(IsolationLevel.ReadCommitted);
        cmd.Transaction = trans;

        try
        {
            cmd.CommandText = "DELETE C_PPC_PLAN WHERE MFG_MONTH='6'";
            cmd.ExecuteNonQuery();
            trans.Commit();

        }
        catch (Exception e)
        {
            trans.Rollback();
        }
        finally
        {
            conn.Close();
        }
    }

person totoz    schedule 11.07.2011    source источник
comment
Можете ли вы объяснить, что означает команда finally delete не выполняется? Время истекло? Возвращает ошибку? Если да, то какая ошибка? Он запускается, но не удаляет строки? Или что-то другое? Можете ли вы запустить тот же оператор DELETE через какой-либо другой интерактивный инструмент (например, SQL*Plus)? Работает ли он быстрее в этой среде?   -  person Justin Cave    schedule 11.07.2011
comment
Он все еще работает, например, 5 минут, но в таблице нет записи для удаления ... Я не получаю ошибку. Я использую PL/SQL для проверки этой команды, и она работает.   -  person totoz    schedule 11.07.2011


Ответы (1)


пытаться

DELETE FROM C_PPC_PLAN WHERE MFG_MONTH='6'

Кстати, ваш код использует «литералы» в некоторых местах вместо переменных связывания (параметров), что делает его уязвимым для SQL-инъекций, что является действительно серьезной проблемой безопасности!

person Yahia    schedule 10.10.2011