Click here to Skip to main content
15,905,875 members
Please Sign up or sign in to vote.
4.00/5 (1 vote)
See more:
I need to pass an object to stored procedure for inserting the data..
I tried this coding

C#
button_click()
{
 insert_pro insobj = new insert_pro();
            insobj.ID = Convert.ToInt16(textBox1.Text);
            insobj.Name = textBox2.Text;
            insobj.Gender =Convert.ToChar(textBox3.Text);


            OracleConnection conn = new OracleConnection("Data Source=r2a;User ID=testv55;Password=testv55;");
            conn.Open();
            OracleCommand cmd = new OracleCommand("smp_ins", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            OracleParameter emp_obj = new OracleParameter();
            emp_obj.OracleDbType = OracleDbType.Object;
            emp_obj.Direction = ParameterDirection.Input;
            emp_obj.UdtTypeName = "EMP_TYP";
            emp_obj.Value = insobj;
            cmd.Parameters.Add(emp_obj);

            cmd.ExecuteNonQuery();
            con.close();
}


insert_pro class:

C#
namespace test_form
{

 public  class insert_pro:IOracleCustomType
    {
        [OracleObjectMappingAttribute("Id")]
        public virtual int  ID { get; set; }

        [OracleObjectMappingAttribute("Name")]
        public virtual string Name { get; set; }

        [OracleObjectMappingAttribute("Gender")]
        public virtual char Gender { get; set; }


        public virtual void FromCustomObject(OracleConnection conn, IntPtr objUdt)
        {

            OracleUdt.SetValue(conn, objUdt, "Id", this.ID);
            OracleUdt.SetValue(conn, objUdt, "Name", this.Name);
            OracleUdt.SetValue(conn, objUdt, "Gender", this.Gender);

        }
        public virtual void ToCustomObject(OracleConnection conn, IntPtr objUdt)
        {
            this.ID = ((int)(OracleUdt.GetValue(conn, objUdt, "Id")));

            this.Name = ((string)(OracleUdt.GetValue(conn, objUdt, "Name")));

            this.Gender = ((char)(OracleUdt.GetValue(conn, objUdt, "Gender")));

        }
    }
}


error message is Custom type mapping for 'test_form.insert_pro' is not specified or is invalid
Posted
Updated 18-Apr-12 4:11am
v3
Comments
Prasad_Kulkarni 18-Apr-12 1:19am    
Where is the problem then?
Please post some code, what you've tried so far..
kevin_ze 18-Apr-12 2:01am    
oracle part:

Create or replace type Employee1 as object
(id Number(10),
Name Varchar2(50),
Gender char(1)
);



/
Create or replace type Employee1_type is table of Employee1;





create or replace Procedure Employee_test(emp_obj Employee1_type)
is
L_Index BINARY_INTEGER:=1;
G_Employee1_type Employee1_type := Employee1_type();
begin
Insert into smp_try values (G_Employee1_type(L_Index).ID,
G_Employee1_type(L_Index).Name,G_Employee1_type(L_Index).Gender);
end;



C#

insert_pro insobj = new insert_pro();
insobj.ID = Convert.ToInt16(textBox1.Text);
insobj.Name = textBox2.Text;
insobj.Gender = textBox3.Text;

OracleConnection conn = new OracleConnection("Data Source=r2a;User ID=testv55;Password=testv55;");
conn.Open();
OracleCommand cmd = new OracleCommand("Employee_test", conn);
cmd.CommandType = CommandType.StoredProcedure;
OracleParameter objParam = new OracleParameter();
objParam.OracleDbType = OracleDbType.Object;
objParam.Direction = ParameterDirection.Input;
objParam.UdtTypeName = "Employee1";
emp_obj.Value = insobj;
cmd.Parameters.Add(emp_obj);
cmd.ExecuteNonQuery();
show_grid();
conn.Close();


inser_pro class:

public class insert_pro:IOracleCustomType
{
[OracleObjectMappingAttribute("id")]
public virtual int ID { get; set; }

[OracleObjectMappingAttribute("name")]
public virtual string Name { get; set; }

[OracleObjectMappingAttribute("gender")]
public virtual string Gender { get; set; }


public virtual void FromCustomObject(OracleConnection conn, IntPtr objUdt)
{

OracleUdt.SetValue(conn, objUdt, "id", this.ID);
OracleUdt.SetValue(conn, objUdt, "name", this.Name);
OracleUdt.SetValue(conn, objUdt, "gender", this.Gender);

}
public virtual void ToCustomObject(OracleConnection conn, IntPtr objUdt)
{
this.ID = ((int)(OracleUdt.GetValue(conn, objUdt, "ID")));

this.Name = ((string)(OracleUdt.GetValue(conn, objUdt, "name")));

this.Gender = ((string)(OracleUdt.GetValue(conn, objUdt, "gender")));

}




}


error message is Custom type mapping for 'test_form.insert_pro' is not specified or is invalid

1 solution

forget to create IOracleCustomTypeFactory


C#
[OracleCustomTypeMappingAttribute("TESTV55.SMP_EMP_TYPE")]
 
 public class ins_Factory : IOracleCustomTypeFactory
 {
    
     public virtual IOracleCustomType CreateObject()
     {
         insert_pro obj = new insert_pro();
           return obj;
     }
 
    
}
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900