2011-04-23 9 views
5

Sto usando Oracle.DataAccess.Client di lavorare con Oracle base di dati nel mio ASP.Net applicazione. Non v'è alcuna documentazione di aiuto in MSDN per ODP.Net e Oracle 's documentazione è veramente male. Non riesco a trovare la risposta a questa semplice domanda.Come eseguire una dichiarazione di aggiornamento utilizzando Oracle ODP.Net in C#

Non è possibile eseguire una semplice istruzione di aggiornamento senza dover creare un oggetto dataset e aggiornare dataset?

Come eseguire un'istruzione di aggiornamento utilizzando Oracle ODP.Net in C#?

+1

ODP.Net implementa IDbCommand, IDbConnection e IDbDataAdapter perché non è possibile utilizzare per preparare ed eseguire l'istruzione UPDATE. – adt

risposta

15

ho bisogno di controllare la sintassi esatta, ma qui è un po 'rapida del codice fuori dalla parte superiore della mia testa

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(); 
} 

È possibile che questo crea un oggetto di comando imposta il comando fino a eseguire un aggiornamento un'istruzione SQL, in questo esempio mostro un modo per impostare una query parametrizzata, dovresti sempre andare con una query parametrizzata. Una volta impostato il comando, è sufficiente chiamare il numero ExecuteNonQuery per eseguire effettivamente il comando.

+1

Dolce! Grazie! Sebbene non sia stato possibile trovare "AddWithValue". ExecuteNonQuery era la chiave, l'ho provato con una query parametrizzata e ha funzionato. Penso di poterlo improvvisare da qui in poi. Apprezzo davvero il tuo tempo !! –

+0

Karthik, il vantaggio di utilizzare una query con parametri è che fa tutto la protezione SQL injection per voi. – SurfingSanta

+0

Heya! Cambiare solo alcune cose per aggiungere il controllo della transazione che consente a Oracle di eseguire i comandi di aggiornamento: 'code' OracleCommand cmd = con.CreateCommand(); OracleTransaction oratrans = con.BeginTransaction (IsolationLevel.ReadCommitted); cmd.Transaction = oratrans; . . . cmd.ExecuteNonQuery(); oratrans.Commit(); Distinti, –

0

Oltre alla risposta di @ Chris, ecco la pagina di documentazione della classe OracleParameter con codice di esempio sull'utilizzo di OracleCommand per l'esecuzione di Update s.

EDIT: Ecco il punto di ingresso per ODP.net documentation.

+1

il link per il codice di esempio che hai fornito è parla di come recuperare i dati utilizzando OracleDataReader e non su come aggiornare i dati (come per la mia domanda iniziale). Ho già esaminato la documentazione di ODP.net e non sono riuscito a trovare un esempio di codice simile per l'aggiornamento. Vorrei MSDN ha documentato questo :( –

1

Così, dopo un po 'di investigatore e lavorare questo fuori per un po', ho trovato che il metodo che ho usato per aggiungere un nuovo parametro per il comando di connessione è la seguente. Non ho trovato il metodo come è stato affermato nel post precedente. Intendiamoci che sto usando un oggetto query con cui sto passando i valori.

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

Sembra che si sta inserendo due volte due 'cmd.ExecuteNonQuery();..' – Halter

+1

Sei corretta Grazie E 'stato modificato... – nshouppuohsn

Problemi correlati