c# 选择查询到 Oracle 数据库抛出 "Custom type mapping for ... is not specified or is invalid"

标签 c# .net oracle mapping oracle-type

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

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提供.不过,错误是我的。 有人可以澄清我哪里出错了吗?

最佳答案

在您的错误消息中,它说 Custom type mapping for 'dataSource='DB' schemaName='C##USER' typeName='MATICNIBROJ_T'' is not specified or is invalid

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

尝试调整它并再次运行代码。

关于c# 选择查询到 Oracle 数据库抛出 "Custom type mapping for ... is not specified or is invalid",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43172178/

相关文章:

.net - Json.NET 与 .NET 4.6 的兼容性

c# - 如何在 ASP.NET MVC 2 中的自定义模型绑定(bind)器中获取 FormValueProvider 实例

sql - 如何在日期字段中插入 NULL Oracle SQL Developer

html - 在 Oracle 查询中处理 HTML 数据

c# - 接口(interface)类型方法参数实现

c# - nhibernate 1.2 和 2.0 之间的区别

c# - Excel-DNA——模板化的 CustomTaskPane 异常

c# - 是否可以使用 ClosedXML 在 Excel 中执行查找?

c# - 使用 Delphi 7 访问托管代码 (CLR) DLL

mysql - postgreSQL mysql oracle 差异