2011-04-23 4 views
5

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

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

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

+1

ODP.Net реализует IDbCommand, IDbConnection и IDbDataAdapter, почему вы не можете использовать их для подготовки и выполнения вашего оператора Update. – adt

ответ

15

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

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, в в этом примере я показываю один способ настройки параметризованного запроса, вы всегда должны идти с параметризованным запросом. После того, как команда будет настроена, вы просто вызываете ExecuteNonQuery, чтобы выполнить команду.

+1

Сладкий! Спасибо! Хотя я не мог найти «AddWithValue». ExecuteNonQuery был ключом, я попробовал его с параметризованным запросом, и он сработал. Я думаю, что я могу импровизировать его здесь. На самом деле цените свое время! –

+0

Karthik, преимущество использования параметризованного запроса заключается в том, что он выполняет всю защиту SQL-инъекций для вас. – SurfingSanta

+0

Хейя! Я бы только изменил несколько вещей, чтобы добавить контроль транзакций, который позволяет Oracle выполнять команды обновления: «code» OracleCommand cmd = con.CreateCommand(); OracleTransaction oratrans = con.BeginTransaction (IsolationLevel.ReadCommitted); cmd.Transaction = oratrans; . . . cmd.ExecuteNonQuery(); oratrans.Commit(); Ваш, –

0

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

EDIT: вот точка входа для ODP.net documentation.

+1

Ссылка на пример кода, который вы предоставили, рассказывает о том, как извлекать данные с помощью OracleDataReader, а не о том, как обновлять данные (согласно моему первоначальному вопросу). Я уже прошел через документацию ODP.net, и я не смог найти аналогичный пример кода для обновления. Я хочу, чтобы MSDN задокументировала это :(. –

1

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

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; 
     } 
    } 
+0

Похоже, вы вставляете дважды: два 'cmd.ExecuteNonQuery();' – Halter

+1

Вы правы. Спасибо, он был отредактирован. – nshouppuohsn

Смежные вопросы