Code: Select all
DDL:
CREATE OR REPLACE procedure test (p_Id IN dbms_sql.Number_Table,
p_NumberValue IN dbms_sql.Number_Table,
p_DateValue IN dbms_sql.Date_Table,
p_StringValue IN dbms_sql.Varchar2_Table)
AS
BEGIN
NULL;
END;
C#:
OracleConnection conn = new OracleConnection("User Id=***;password=***;server=***;Direct=false;");
conn.Open();
decimal[] ids = new decimal[] { 1, 2, 3 };
decimal?[] numberValues = new decimal?[] { 11, 12, 13 };
DateTime?[] dateValues = new DateTime?[] { null, null, null };
string[] stringValues = new string[] { null, null, null };
OracleCommand cmd = new OracleCommand("test", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.PassParametersByName = true;
cmd.Parameters.Add("p_Id", OracleDbType.Number);
cmd.Parameters.Add("p_NumberValue", OracleDbType.Number);
cmd.Parameters.Add("p_DateValue", OracleDbType.Date);
cmd.Parameters.Add("p_StringValue", OracleDbType.VarChar);
cmd.Parameters["p_NumberValue"].IsNullable = true;
cmd.Parameters["p_DateValue"].IsNullable = true;
cmd.Parameters["p_StringValue"].IsNullable = true;
cmd.Parameters["p_Id"].ArrayLength = ids.Length;
cmd.Parameters["p_NumberValue"].ArrayLength = numberValues.Length;
cmd.Parameters["p_DateValue"].ArrayLength = dateValues.Length;
cmd.Parameters["p_StringValue"].ArrayLength = stringValues.Length;
cmd.Parameters["p_StringValue"].Size = 4000;
cmd.Parameters["p_Id"].Value = ids;
cmd.Parameters["p_NumberValue"].Value = numberValues;
cmd.Parameters["p_DateValue"].Value = dateValues;
cmd.Parameters["p_StringValue"].Value = stringValues;
cmd.ExecuteNonQuery();
conn.Close();
Invalid cast from 'System.Decimal' to 'System.Nullable`1[[System.Decimal, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]'. at System.Convert.DefaultToType(IConvertible value, Type targetType, IFormatProvider provider)
at System.Decimal.System.IConvertible.ToType(Type type, IFormatProvider provider)
at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
at Devart.Data.Oracle.OracleParameter.a(t& A_0, Boolean A_1, Boolean A_2, OracleCommand A_3, Byte[] A_4, Hashtable A_5, ag A_6)
at Devart.Data.Oracle.OracleCommand.a(OracleParameterCollection A_0, t[] A_1, a2 A_2, ag A_3)
at Devart.Data.Oracle.OracleCommand.InternalExecute(CommandBehavior behavior, IDisposable disposable, Int32 startRecord, Int32 maxRecords, Boolean nonQuery)
at Devart.Common.DbCommandBase.ExecuteDbDataReader(CommandBehavior behavior, Boolean nonQuery)
at Devart.Data.Oracle.OracleCommand.ExecuteNonQuery()