Hesham el Masry Ответов: 0

OCI-22303: тип ""."тип объекта моей хранимой процедуры" не найден


Здравствуйте , у меня есть проблема, когда я вызываю свою хранимую процедуру из c#, в моей хранимой процедуре oracle, которую я вызываю, у меня есть 2 входа и два выхода , мои входные данные первый вход-CLOB означает, что он будет передавать строку в коде c#, а второй вход-число.мои результаты первый выход-это определенный объект в моей хранимой процедуре
t_t_out_house_details и этот объект возвращает 10 значений, второй вывод-число.
моя хранимая процедура:
PROCEDURE prc_get_impacted_houses(p_polygon_geom      IN CLOB,
                                    p_imkl_id        IN NUMBER,
                                    p_out_house_details OUT t_t_out_house_details,
                                    p_return_cd         OUT NUMBER);

я вызываю эту хранимую процедуру и передаю эти два входа с помощью c# вот так:
static public void CallingStoredProcedure(string PolygonGeom, int PImklId)
        {


            //my custom object 

            try
            {

                //conection to the database

                using (OracleConnection conn = new OracleConnection("Data Source=; User ID=; Password="))
                {
                    
                    t_out_house_details houseDetails = new t_out_house_details();
                    OracleCommand cmd = new OracleCommand();
                    conn.Open();
                    cmd = new OracleCommand("prc_get_impacted_houses", conn);
                     cmd.CommandType = CommandType.StoredProcedure;

                    //first input
                    cmd.Parameters.Add("p_polygon_geom", OracleDbType.Clob).Value = PolygonGeom;

                    cmd.Parameters.Add("p_imkl_id", OracleDbType.Int32).Value = PImklId;

                    //Oracle Parameters

                    //first output
                    OracleParameter objParam = new OracleParameter();

                    objParam.OracleDbType = OracleDbType.Object;

                    objParam.UdtTypeName = "t_t_out_house_details";
                    objParam.Value = houseDetails;
                    //T_T_OUT_HOUSE_DETAILS
                    
                    objParam.Direction = ParameterDirection.Output;
                    cmd.Parameters.Add(objParam);

                    //second output
                    OracleParameter op = null;
                     op = new OracleParameter("p_return_cd", OracleDbType.Int32);
                    op.Direction = ParameterDirection.Output;
                    cmd.Parameters.Add(op);
                   // cmd.BindByName = false;
                    //Taking instance from my object 
                    
                    //execute my command
                    cmd.ExecuteNonQuery();
                    houseDetails = (t_out_house_details)objParam.Value;
                }


                ////Console.WriteLine(cmd.Parameters["p_return_cd"].Value);
            }
                catch(OracleException ex)
            {
                Console.WriteLine(ex.Message);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                //throw new Exception("Error " + ex.Message);
            }



кроме того, у меня есть объект c#, где я хочу сохранить свои возвращаемые значения из этого объекта хранимой процедуры в него.
мой объект c#
public class t_out_house_details
    {

            public string NET_CD { get; set; }
            public int SUBNET_NR { get; set; }
            public int CABLE_NUMBER { get; set; }
            public int MK { get; set; }
            public int KG { get; set; }
            public int KS { get; set; }
            public string HOUSENR_FIRST { get; set; }
            public string HOUSENR_FIRST_SUFFIX { get; set; }
            public string GEOMETRY { get; set; }
            public string PROJ_LINE_GEOM { get; set; }



    }


моя проблема в том, что мой код не может прочитать тип объекта, который я определяю с помощью UTD user defind types.
моя ода застряла здесь :
OracleParameter objParam = new OracleParameter();

                    objParam.OracleDbType = OracleDbType.Object;

                    objParam.UdtTypeName = "t_t_out_house_details";
                    objParam.Value = houseDetails;
                    //T_T_OUT_HOUSE_DETAILS
                    
                    objParam.Direction = ParameterDirection.Output;
                    cmd.Parameters.Add(objParam);

и дайте мне эту ошибку: что он не может найти мой объект :

OCI-22303: тип ""."тип объекта моей хранимой процедуры" не найден
я хочу знать в чем проблема
я вставляю строку и int, и я протестировал эту хранимую процедуру на pl sql, она работает нормально без ошибок.

Joan Magnet

Вы искали в codeproject?

http://www.codeproject.com/Articles/141728/Interaction-between-C-Application-and-Oracle-throu

Hesham el Masry

да да но это не работает

Member 13752818

нашли ли вы решение этой проблемы?

0 Ответов