我有一个谜题。有时我们的程序出现“未指定'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
{
}
}
答案 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