“xxx.DataAccess.UDT_Table_Numbers”的自定义类型映射未指定或无效

时间:2013-09-24 07:15:02

标签: c#

我有一个谜题。有时我们的程序出现“未指定'xxx.DataAccess.UDT_Table_Numbers'的自定义类型映射或无效。”例外。我重新启动IIS服务器后,它是工作。 任何帮助将不胜感激。

关系代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Data;
using System.Configuration;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;

using OMS.BusinessEntity.ORDValid;
using OMS.Utilities.DBUtility;
using OMS.Utilities.Common;


namespace OMS.ORDValid.DataAccess
{
public class ExceptionHandlingDAO
{
    public string AcceptOrder(string UserID, string Customer, string OrderNo, string Exflag, string LineString, string PriorityFlag, 
                                            List<string> LstPrice)
    {
        OracleConnection conn = new OracleConnection(OracleHelper.Wistron_WOMS_ConnStr);
        OracleCommand cmd = new OracleCommand();

        try
        {
            ....
            string ProcedureName = "PROC_ACCEPTORDER";

            OracleParameter[] parmArray = {
                new OracleParameter("v_rodno", OracleDbType.Varchar2),
                new OracleParameter("v_customer", OracleDbType.Varchar2),
                new OracleParameter("v_exflag", OracleDbType.Varchar2),
                new OracleParameter("v_userid", OracleDbType.Varchar2), 
                new OracleParameter("v_highPriority", OracleDbType.Varchar2),
                new OracleParameter("v_lineString", OracleDbType.Varchar2),
                new OracleParameter("v_PriceList", OracleDbType.Object),
                new OracleParameter("v_result", OracleDbType.Varchar2),
            };

            parmArray[0].Value = OrderNo;
            parmArray[1].Value = Customer;
            parmArray[2].Value = Exflag;
            parmArray[3].Value = UserID;
            parmArray[4].Value = PriorityFlag;
            parmArray[5].Value = LineString;

            parmArray[6].UdtTypeName = "OMS.EXCEPTION_REASON";
            parmArray[6].Value = new UDT_Table_Numbers { Value = LstPrice.ToArray() }; 
            parmArray[7].Size = 5000;   

            parmArray[0].Direction = ParameterDirection.Input;
            parmArray[1].Direction = ParameterDirection.Input;
            parmArray[2].Direction = ParameterDirection.Input;
            parmArray[3].Direction = ParameterDirection.Input;
            parmArray[4].Direction = ParameterDirection.Input;
            parmArray[5].Direction = ParameterDirection.Input;
            parmArray[6].Direction = ParameterDirection.Input;
            parmArray[7].Direction = ParameterDirection.Output;

            foreach (OracleParameter parm in parmArray)
            {
                cmd.Parameters.Add(parm);
            }

            cmd.Connection = conn;
            cmd.CommandText = ProcedureName;
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.ExecuteNonQuery();
            string temp = cmd.Parameters["v_result"].Value.ToString();
            cmd.Parameters.Clear();
            return temp;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
        finally
        {
            ...
        }
    }

}

public class UDT_Table_Numbers : TableTemplate<string>
{
    // Inherited from TableTemplate   
}

// Factory to create an object for the above class   
[OracleCustomTypeMappingAttribute("OMS.EXCEPTION_REASON")]
public class StringTableFactory : TableFactoryTemplate<UDT_Table_Numbers>
{
    public override System.Array CreateStatusArray(int length)
    {
        OracleUdtStatus[] udtStatus = new OracleUdtStatus[length];
        return udtStatus;
    }
}


public class TableTemplate<Type> : IOracleCustomType
{
    [OracleArrayMappingAttribute()]
    public virtual Type[] Value { get; set; }

    public virtual void FromCustomObject(OracleConnection con, System.IntPtr pUdt)
    {
        if (this.Value != null)
        {
            OracleUdt.SetValue(con, pUdt, 0, this.Value);
        }
    }

    public virtual void ToCustomObject(OracleConnection con, System.IntPtr pUdt)
    {
        this.Value = ((Type[])(OracleUdt.GetValue(con, pUdt, 0)));
    }
}

public class TableFactoryTemplate<T> : IOracleCustomTypeFactory, IOracleArrayTypeFactory where T : IOracleCustomType, new()
{
    public virtual IOracleCustomType CreateObject()
    {
        T obj = new T();
        return obj;
    }

    public virtual System.Array CreateArray(int length)
    {
        System.Type type = typeof(T).GetProperties()[0].PropertyType.GetElementType();
        return Array.CreateInstance(type, length);
    }

    public virtual System.Array CreateStatusArray(int length)
    {
        return null;
    }
}

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class NullableAttribute : Attribute
{
}

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class IgnoreAttribute : Attribute
{
}
}

1 个答案:

答案 0 :(得分:0)

详细信息堆栈跟踪如下: - - 堆栈跟踪 - -    System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(reqMsg As IMessage,retMsg As IMessage)        (未知档案):N 4729427    System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(msgData As MessageData&amp;,type as Int32)        (未知文件):N 01725    OMS.ORDValid.ORDValidServiceRef.ORDValidServiceContract.BatchUpdateExcptHandling(请求为BatchUpdateExcptHandlingRequest)        (未知文件):N 00000    OMS.ORDValid.ORDValidServiceRef.ORDValidServiceContractClient.BatchUpdateExcptHandling(ActionType As String,CustomerString As String,ORDExceptionHDInfo As List 1, UserID As String, Result As String&) Reference.cs: line 2532, col 13, IL 0035 OMS.ORDValid.Views.ExceptionHandlingDefaultPresenter.BatchExceptHandle(list As List 1)        ExceptionHandlingDefaultPresenter.cs:0250行,col 09,IL 0136    System.Web.UI.WebControls.Button.RaisePostBackEvent(eventArgument As String)        (未知档案):N 00154    System.Web.UI.Page.ProcessRequestMain(includeStagesBeforeAsyncPoint As Boolean,includeStagesAfterAsyncPoint As Boolean)        (未知档案):N 03707

异常类型:System.ServiceModel.FaultException`1 [[System.ServiceModel.ExceptionDetail,System.ServiceModel,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]] 异常消息:未指定“xxx.DataAccess.UDT_Table_Numbers”的自定义类型映射或无效。 例外来源:mscorlib