मैं .NET 3.5 और Oracle 10gR2 चला रहा हूं। मैंने आपकी टिप्पणी के जवाब में एक आउटपुट पैरामीटर जोड़ा है।
Server
, Uid
, और Pwd
निर्दोषों की रक्षा के लिए बदल दिया गया है। उन्हें उपयुक्त मानों पर सेट करें।
मेरी संग्रहित प्रक्रिया:
create or replace
procedure test_proc(p1 in number, p2 in out varchar2) is
begin
p2 := to_char(p1 + to_number(p2));
end;
मेरा परीक्षण कोड:
using System;
using System.Data;
using System.Data.Odbc;
class OdbcTest
{
const string connectionString =
@"Driver={Microsoft ODBC for Oracle};" +
@"Server=MyTnsName;" +
@"Uid=MySchema;" +
@"Pwd=MyPassword;";
public static string TryMe()
{
using (var odbcConn = new OdbcConnection(connectionString))
using (var odbcCommand = odbcConn.CreateCommand())
{
odbcCommand.CommandText = "{ CALL test_proc(?, ?) }";
odbcCommand.CommandType = CommandType.StoredProcedure;
odbcCommand.Parameters.Add("p1", OdbcType.Decimal).Value = 42;
var p2 = odbcCommand.Parameters.Add("p2", OdbcType.VarChar, 30);
p2.Direction = ParameterDirection.InputOutput;
p2.Value = "25";
odbcConn.Open();
odbcCommand.ExecuteNonQuery();
return p2.Value as string; // returns 67
}
}
}
OUT
का उपयोग करते समय या IN OUT
पैरामीटर, Size
OdbcParameter
. की संपत्ति पर्याप्त मान पर सेट किया जाना चाहिए।
अपवाद हैंडलिंग के संबंध में आपकी टिप्पणी के जवाब में, मेरे पास डेटा एक्सेस विधि हैंडल अपवादों का कॉलर होगा। using
. के साथ निर्माण, Dispose
विधि स्वचालित रूप से कमांड और कनेक्शन ऑब्जेक्ट पर कॉल की जाएगी चाहे कोई अपवाद हो या नहीं।