आप ODP.NET का उपयोग करना चाहेंगे। (ओरेकल के ओरेकल डेटा एक्सेस कंपोनेंट्स):
इसका एक उदाहरण नीचे है। ध्यान दें कि ODP.NET में, आप एक पैरामीटर दिशा (इनपुट, इनपुटआउटपुट, आउटपुट, रिटर्नवैल्यू) स्थापित कर सकते हैं जो आपके द्वारा चलाए जा रहे प्रक्रिया या कथन के पैरामीटर के अनुरूप हो। इस उदाहरण में, मैं एक रिटर्नवैल्यू को पकड़ रहा हूं, जो एक आईडी है जो डीबी द्वारा अनुक्रम और ट्रिगर के माध्यम से उत्पन्न होता है (जहां तक .NET ऐप का संबंध है, इसे स्वचालित रूप से बनाया गया है):
int event_id = 0;
using (OracleConnection oraConn = new OracleConnection(connStr))
{
string cmdText = @"insert into EVENT
(EVENT_NAME, EVENT_DESC)
values
(:EVENT_NAME, :EVENT_DESC)
RETURNING EVENT_ID INTO :EVENT_ID
";
using (OracleCommand cmd = new OracleCommand(cmdText, oraConn))
{
oraConn.Open();
OracleTransaction trans = oraConn.BeginTransaction();
try
{
OracleParameter prm = new OracleParameter();
cmd.BindByName = true;
prm = new OracleParameter("EVENT_NAME", OracleDbType.Varchar2);
prm.Value = "SOME NAME"; cmd.Parameters.Add(prm);
prm = new OracleParameter("EVENT_DESC", OracleDbType.Varchar2);
prm.Value = "SOME DESC"; cmd.Parameters.Add(prm);
prm = new OracleParameter( "EVENT_ID"
, OracleDbType.Int32
, ParameterDirection.ReturnValue);
cmd.Parameters.Add(prm);
cmd.ExecuteNonQuery();
trans.Commit();
// return value
event_id = ConvertFromDB<int>(cmd.Parameters["EVENT_ID"].Value);
}
catch
{
trans.Rollback();
throw;
}
finally
{
trans.Dispose();
}
oraConn.Close();
}
}
ConvertFromDB अपने .NET समकक्ष (इस मामले में एक int) के लिए वापसी मूल्य डालने के लिए सिर्फ एक सामान्य है।
आशा है कि यह मदद करता है।
संपादित करें:
आप आसानी से ODP.NET में मानों की एक सरणी को बाँध सकते हैं (और वापसी मूल्यों की एक सरणी को पुनः प्राप्त कर सकते हैं):
using (OracleConnection oraConn = new OracleConnection(connStr))
{
string cmdText = @"insert into TEST_EVENT
(EVENT_NAME, EVENT_DESC)
values
(:EVENT_NAME, :EVENT_DESC)
RETURNING EVENT_ID INTO :EVENT_ID
";
using (OracleCommand cmd = new OracleCommand(cmdText, oraConn))
{
oraConn.Open();
OracleTransaction trans = oraConn.BeginTransaction();
try
{
string[] event_names = new string[2];
string[] event_descs = new string[2];
int[] event_ids = new int[2];
event_names[0] = "Event1";
event_descs[0] = "Desc1";
event_names[1] = "Event2";
event_descs[1] = "Desc2";
OracleParameter prm = new OracleParameter();
cmd.Parameters.Clear();
cmd.ArrayBindCount = 2;
cmd.BindByName = true;
prm = new OracleParameter("EVENT_NAME", OracleDbType.Varchar2);
prm.Value = event_names; cmd.Parameters.Add(prm);
prm = new OracleParameter("EVENT_DESC", OracleDbType.Varchar2);
prm.Value = event_descs; cmd.Parameters.Add(prm);
prm = new OracleParameter( "EVENT_ID"
, OracleDbType.Int32
, ParameterDirection.ReturnValue);
cmd.Parameters.Add(prm);
cmd.ExecuteNonQuery();
trans.Commit();
// get return values
event_ids = (int[])(cmd.Parameters["EVENT_ID"].Value);
}
catch
{
trans.Rollback();
throw;
}
finally
{
trans.Dispose();
}
oraConn.Close();
}
}