2017-06-05 93 views
1

我想在ORACLE中运行更新查询,但要反映该查询的更改(意味着使用接受值更新数据库中的值),我必须运行一个提交;在那个查询之后的(那么只有值更改将在数据库中更新)。那么,我如何通过C#将更新语句和提交传递到同一行。如何在ORACLE中运行一个更新并提交单个命令

我运行像下面的查询,

UPDATE table_name 
    SET columnname1 = 'N', 
     columnname2 = 1 
WHERE columnname3 = '-2085371064'; 

COMMIT; 
+0

你怎么说*“反映了查询的变化” *的意思是:但是,如果你坚持COMMIT你可以用Oracle的匿名块的帮助下做到这一点? – eocron

+0

你确定'columnname3'的类型是'Char' \'VarChar2'吗? 'columnname3 ='-2085371064''?它似乎应该是'columnname3 = -2085371064'(无撇号) –

+0

通常,您不希望* explict *'commit':关闭连接时,所有更改将由* autocommit *应用。 –

回答

2

假设你正在使用ADO.NET,您可以利用提交()方法:

using (OracleConnection connection = new OracleConnection(connectionString)) 
{ 
    connection.Open(); 

    OracleCommand command = connection.CreateCommand(); 
    OracleTransaction transaction; 

    transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted); 
    command.Transaction = transaction; 

    try 
    { 
     command.CommandText = 
      "UPDATE table_name SET columnname1 = 'N',  columnname2 = 1 WHERE columnname3 = '-2085371064';"; 
     command.ExecuteNonQuery(); 
     transaction.Commit(); 
    } 
    catch (Exception e) 
    { 
     transaction.Rollback(); 
     Console.WriteLine(e.ToString()); 
    } 
} 
+0

感谢人工作:) –

2

通常情况下,你不想要明确commit因为所有的变化将是自动提交关闭连接。

//TODO: put the right connection here 
using (OracleConnection con = new OracleConnection(ConnectionStringHere)) { 
    con.Open(); 

    string sql = 
    @"BEGIN -- Anonymous block: run these queries (update, commit) together 
     UPDATE table_name 
      SET columnname1 = 'N', 
       columnname2 = 1 
      WHERE columnname3 = '-2085371064'; -- Is it really a string? 

     COMMIT; -- Not necessary, but possible 
     END;"; 

    using (var q = con.CreateCommand()) { 
    q.CommandText = sql; 

    q.ExecuteNonQuery(); 
    } 
} 
相关问题