c#选择对Oracle数据库的查询会引发“未指定...的自定义类型映射或无效". [英] c# select query to Oracle database throws "Custom type mapping for ... is not specified or is invalid"

查看:286
本文介绍了c#选择对Oracle数据库的查询会引发“未指定...的自定义类型映射或无效".的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在我的c#应用程序中映射一个简单的Oracle UDT.当我尝试从DataReader提取数据时,它引发以下异常:

I am trying to map a simple Oracle UDT in my c# application. When I try to extract data from DataReader, it throws the following exception:

'dataSource ='DB'schemaName ='C ## LAZAR'的自定义类型映射 typeName ='MATICNIBROJ_T'未指定或无效

Custom type mapping for 'dataSource='DB' schemaName='C##LAZAR' typeName='MATICNIBROJ_T'' is not specified or is invalid

Oracle UDT 是:

create or replace 
TYPE            "MATICNIBROJ_T" AS OBJECT (
  MaticniBroj NUMBER(13)
)
INSTANTIABLE NOT FINAL

自定义类用于映射:

[OracleCustomTypeMapping("C##LAZAR.MATICNIBROJ_T")]
public class MaticniBrojT : IOracleCustomType
    {
        [OracleObjectMappingAttribute("MaticniBroj")]
        public virtual int MaticniBroj { get; set; }

        //c# custom type --> Oracle UDT
        public virtual void FromCustomObject(OracleConnection conn, IntPtr obj)
        {
            OracleUdt.SetValue(conn, obj, "MaticniBroj", this.MaticniBroj);
        }

        //Oracle UDT --> c# custom type
        public virtual void ToCustomObject(OracleConnection conn, IntPtr obj)
        {
            this.MaticniBroj = ((int)(OracleUdt.GetValue(conn, obj, "MaticniBroj")));
        }
    }

数据库通信:

    string upit = @"SELECT PIB, NAZIV, RACUN, FAX, TELEFON, ADRESA, EMAIL,
    MATICNIBR FROM KOMITENT_VW k WHERE UPPER(NAZIV) LIKE '%" + naziv.ToUpper() + "%'";

                    conn = napraviKonekciju();

                    conn.Open();

                OracleCommand cmd = new OracleCommand();

                cmd.Connection = conn;

                cmd.CommandText = upit;
                cmd.CommandType = CommandType.Text;

                OracleDataReader dr = cmd.ExecuteReader();

                DataSet ds = new DataSet();
                DataTable dt = new DataTable();

                dt.Columns.Add("PIB");
                dt.Columns.Add("NAZIV");
                dt.Columns.Add("RACUN");
                dt.Columns.Add("FAX");
                dt.Columns.Add("TELEFON");
                dt.Columns.Add("ADRESA");
                dt.Columns.Add("EMAIL");
                dt.Columns.Add("MATICNIBR");
                ds.Tables.Add(dt);

                while(dr.Read())
                {
                    DataRow red = dt.NewRow();
                    red["PIB"] = dr.GetInt32(0);
                    red["NAZIV"] = dr.GetString(1);
                    red["RACUN"] = dr.GetString(2);
                    red["FAX"] = dr.GetString(3);
                    red["TELEFON"] = dr.GetString(4);
                    red["ADRESA"] = dr.GetString(5);
                    red["EMAIL"] = dr.GetString(6);
                    //----next line throws an exception
                    MaticniBrojT mBroj = (MaticniBrojT)dr.GetValue(7);

                    red["MATICNIBR"] = Convert.ToInt64(mBroj.MaticniBroj);
                }

                return ds;
            }
            catch (Exception ex)
            {
                return null;
            }
            finally
            {
                conn.Close();
                conn.Dispose();
                conn = null;
            }

大多数代码由用户 LSA 提供.不过,这些错误是我的. 有人可以弄清楚我出了什么问题吗?

Most of the code is provided by user LSA. The errors are mine, though. Can someone clarify where I went wrong?

推荐答案

在您的错误消息中,它说'dataSource ='DB'schemaName = 'C ## USER' typeName ='的自定义类型映射MATICNIBROJ_T''未指定或无效

In your error message it says Custom type mapping for 'dataSource='DB' schemaName='C##USER' typeName='MATICNIBROJ_T'' is not specified or is invalid

在您的自定义类型映射中,它显示[OracleCustomTypeMapping(" C ## LAZAR .MATICNIBROJ_T")]

And in your custom type mapping it says [OracleCustomTypeMapping("C##LAZAR.MATICNIBROJ_T")]

尝试调整它,然后再次运行代码.

Try adjusting it and run the code again.

这篇关于c#选择对Oracle数据库的查询会引发“未指定...的自定义类型映射或无效".的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆