Как выполнить оператор обновления с помощью Oracle ODP.Net в C#

Я использую Oracle.DataAccess.Client для работы с базой данных Oracle в своем приложении ASP.Net. В MSDN нет справочной документации для ODP.Net, а документация Oracle действительно очень плохая. Я не могу найти ответ на этот простой вопрос.

Разве нельзя выполнить простой оператор обновления без создания объекта dataset и обновления dataset?

Как выполнить оператор обновления с помощью Oracle ODP.Net в C#?


person Karthik Murugesan    schedule 23.04.2011    source источник
comment
ODP.Net реализует IDbCommand, IDbConnection и IDbDataAdapter, поэтому вы не можете использовать их для подготовки и выполнения оператора обновления.   -  person adt    schedule 23.04.2011


Ответы (3)


Мне нужно будет проверить точный синтаксис, но вот быстрый код, который пришел мне в голову.

using (OracleConnection con = new OracleConnection(...))
{
  con.Open();
  OracleCommand cmd = con.CreateCommand();
  cmd.CommandType = CommandType.Text;
  cmd.CommandText = "update table set col1 = :param1, col2 = :param2 where key = :keyValue";
  cmd.Parameters.AddWithValue("param1", 1);
  cmd.Parameters.AddWithValue("param2", "Text data");
  cmd.Parameters.AddWithValue("keyValue", "1");
  cmd.ExecuteNonQuery();
}

Приведенное выше создает объект команды, устанавливающий команду для выполнения инструкции SQL Update, в этом примере я показываю один способ настройки параметризованного запроса, вы всегда должны использовать параметризованный запрос. Как только команда настроена, вы просто вызываете ExecuteNonQuery, чтобы фактически выполнить команду.

person Chris Taylor    schedule 23.04.2011
comment
Сладкий! Спасибо! Хотя я не смог найти AddWithValue. ExecuteNonQuery был ключом, я попробовал его без параметризованного запроса, и это сработало. Думаю, с этого момента я могу импровизировать. Очень цените ваше время!! - person Karthik Murugesan; 24.04.2011
comment
Картик, преимущество использования параметризованного запроса в том, что он обеспечивает всю защиту от SQL-инъекций за вас. - person SurfingSanta; 24.07.2015
comment
Эй! Я бы изменил только несколько вещей, чтобы добавить управление транзакциями, которое позволяет Oracle выполнять команды обновления: code OracleCommand cmd = con.CreateCommand(); OracleTransaction oratrans = con.BeginTransaction(IsolationLevel.ReadCommitted); cmd.Transaction = оратранс; . . . cmd.ExecuteNonQuery(); oratrans.Commit(); Ваш, - person Alexey Honorio; 08.03.2017

Итак, после небольшого поиска и работы над этим некоторое время, я обнаружил, что метод, который я использовал для добавления нового параметра в команду подключения, выглядит следующим образом. Я не нашел способ, как было указано в предыдущем посте. Имейте в виду, что я использую объект запроса, с которым я передаю значения.

  public Boolean InsertMethod(Query _query)
    {
        var success = false;
        var queryString = string.Format(@"INSERT INTO TABLE(ID, OWNER, TEXT) VALUES (TABLE_SEQ.NEXTVAL,:OWNER, :TEXT)");
        try
        {
            using (OracleConnection con = new OracleConnection(ConString))
            {
                con.Open();
                OracleCommand cmd = con.CreateCommand();
                cmd.CommandText = queryString;
                cmd.Parameters.Add("OWNER", _query.Owner);
                cmd.Parameters.Add("TEXT", _query.Text);          

                int rowsUpdated = cmd.ExecuteNonQuery();

                if (rowsUpdated > 0) success = true;
            }

            return success;
        }
        catch (Exception ex)
        {
            log.Error(ex);
            throw;
        }
    }
person nshouppuohsn    schedule 25.08.2016
comment
Похоже, вы вставляете дважды. два cmd.ExecuteNonQuery(); - person Halter; 23.01.2017

В дополнение к ответу @Chris, вот страница документации OracleParameter класс с примером кода использования OracleCommand для выполнения Updates.

РЕДАКТИРОВАТЬ: Вот точка входа для документации ODP.net.

person shahkalpeshp    schedule 23.04.2011
comment
Ссылка на предоставленный вами образец кода рассказывает о том, как извлекать данные с помощью OracleDataReader, а не о том, как обновлять данные (согласно моему первоначальному вопросу). Я уже просмотрел документацию ODP.net и не смог найти аналогичный пример кода для обновления. Я бы хотел, чтобы MSDN задокументировал это :(. - person Karthik Murugesan; 24.04.2011