如何在OracleCommand INSERT INTO之后检索sys_guid()的值

问题描述 投票:0回答:1

我想检索某个事务中包含Oracle db生成的sys_guid()的某些列的值。

public string GetGUID(OracleConnection connection) 
{ 
  string guid = "";
  connection.Open();
  OracleCommand cmd = new OracleCommand();
  OracleTransaction transaction;
  transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);
  cmd.Transaction = transaction;
  cmd.Connection = connection;
  try
  {
   cmd = connection.CreateCommand();
   cmd.CommandText = "INSERT INTO CUSTOMERS (NAME,DETAILS) VALUES (:nm, :dts, :orderid)";
   cmd.Parameters.Add("nm", OracleDbType.VarChar);
   cmd.Parameters["nm"].Value = name;
   cmd.Parameters.Add("dts", OracleDbType.VarChar);
   cmd.Parameters["dts"].Value = details;
   cmd.Prepare();
   OracleDataReader reader = cmd.ExecuteReader();
   while (reader.Read())
   {

   }
   reader.Close();
   transaction.Commit();
  }
  catch (Exception e)
  {
      transaction.Rollback();
      Console.WriteLine(e.Message);
      }
 return guid;
}

表客户有一个ORDER列,它使用SYS_GUID()创建了一个GUID,如何检索该GUID?

c# oracle devart
1个回答
0
投票

例如尝试returning .. into子句

   ...

   using (OracleCommand cmd = connection.CreateCommand()) {
     cmd.CommandText = 
       @"INSERT INTO CUSTOMERS (
           NAME,
           DETAILS) 
         VALUES (
           :nm, 
           :dts)
         RETURNING 
           ""ORDER"" INTO :orderid";

     cmd.Parameters.Add("nm", OracleDbType.VarChar);
     cmd.Parameters["nm"].Value = name;
     cmd.Parameters.Add("dts", OracleDbType.VarChar);
     cmd.Parameters["dts"].Value = details;

     cmd.Parameters.Add("orderid", OracleDbType.VarChar);  
     cmd.Parameters["dts"].Direction = ParameterDirection.Output;

     try {
       cmd.ExecuteNonQuery();
       transaction.Commit(); 

       guid = Guid.Parse(Convert.ToString(cmd.Parameters["dts"].Value));
     }
     catch (Exception e) {
       transaction.Rollback();        
     } 

     return guid;
   }  

   ...
© www.soinside.com 2019 - 2024. All rights reserved.