![](/img/trans.png)
[英]Oracle.ManagedDataAccess.Core 3.21.61 using UDT Oracle 11g with c# .net 6
[英]Getting IDs back from an Oracle query using .net core and Oracle.ManagedDataAccess.Core
我有以下代碼:
List<foo> collection = getData();
using (OracleConnection conn = _client.GetConnection())
{
await conn.OpenAsync();
using (OracleTransaction transaction = conn.BeginTransaction(IsolationLevel.ReadCommitted))
using (OracleCommand cmd = new OracleCommand())
{
cmd.Transaction = transaction;
cmd.Connection = conn;
cmd.CommandText = @"INSERT INTO SOME.TABLE
(A, B, C)
VALUES
(:A, :B, :C)";
cmd.ArrayBindCount = collection.Count;
cmd.Parameters.Add(":A", OracleDbType.Varchar2, collection.Select(c => c.A).ToArray(), ParameterDirection.Input);
cmd.Parameters.Add(":B", OracleDbType.Varchar2, collection.Select(c => c.B).ToArray(), ParameterDirection.Input);
cmd.Parameters.Add(":C", OracleDbType.Varchar2, collection.Select(c => c.C).ToArray(), ParameterDirection.Input);
try
{
await cmd.ExecuteNonQueryAsync();
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
throw new FailedTransactionException(ex.ToString());
}
}
}
在這里,我可以從我的集合中插入多行數據,但是我需要以某種方式返回插入行的ID。 有人可以為我指出正確的方向,還是有更好的方法插入對象數組並找回ID。
您可以通過執行以下操作來獲取生成的ID:
@"INSERT INTO SOME.TABLE
(A, B, C)
VALUES
(:A, :B, :C)
RETURNING <YOUR-ID-FIELD> INTO :resultId";
並像這樣聲明結果參數:
var resultParam = new OracleParameter(":resultId", OracleDbType.Decimal /* or whatever type of your identifier has */);
resultParam.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(resultParam);
然后,可以從其參數的Value屬性執行查詢后,從參數中讀取結果:
var result = resultParam.Value
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.