Type Converter Issue Int16ToInt32

Posts   
 
    
Rishi
User
Posts: 69
Joined: 31-Oct-2011
# Posted on: 15-Dec-2011 23:47:18   

Hi,

I am using LLBLGrn Pro 3.1, SQL 2008 and Oracle 11i

Oracle Id - Number(1,0) - .Net Type - Int16 SQL Int - .Net Type Int32

I am using Type Converter Int16ToInt32, which is mapped to oracle in llblgen designer.Type converter is defined as follows...

using System; using System.ComponentModel;

namespace SD.LLBLGen.Pro.TypeConverters { [Description("Converter with as core type System.Int16, for mapping a field with a .NET type System.Int16 onto a System.Int32 database field")] public class Int16ToInt32TypeConverter : TypeConverter { public Int16ToInt32TypeConverter() { }

  public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
  {
    // any integer type is accepted. No fractional types like float/double.
    switch (sourceType.FullName)
    {
      case "System.Int16":
        return true;
      default:
        return false;
    }
  }

  public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
  {
    // any integer type is accepted. No fractional types like float/double.
    switch (destinationType.FullName)
    {
      case "System.Int32":
        return true;
      default:
        return false;
    }
  }

  public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
  {
    Int32 toReturn;
    switch (value.GetType().FullName)
    {
      case "System.Int16":
        toReturn = Convert.ToInt32(value);
        break;
      default:
        //return value;
        throw new NotSupportedException("Conversion from a value of type '" + value.GetType().ToString() + "' to System.Int32 isn't supported");

    }

    return toReturn;
  }

  public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
  {
    if (value == null)
    {
      //throw new ArgumentNullException("value", "Value can't be null");
      return Int32.MinValue;
    }

    if (!(value is Int32))
    {
      //throw new ArgumentException("Value isn't of type Int32", "value");
      return value;
    }

    return Convert.ToInt16(value);
  }


  public override object CreateInstance(ITypeDescriptorContext context, System.Collections.IDictionary propertyValues)
  {
    return Int32.MinValue;
  }

} }

Error:

At Line 40 : switch (value.GetType().FullName)

System Error:

DomainId: -1, User: , UserId: -1, EmployeeId: -1, , Product Version: 1.2.3.700

ErrorDescription: The following exception occured at System.Object ConvertFrom(System.ComponentModel.ITypeDescriptorContext, System.Globalization.CultureInfo, System.Object): Object reference not set to an instance of an object.

The following exception occured at Grb.Framework.Business.Lower.EntityClasses.LoginEntity GetLoginEntity(System.String): DomainManager_GetLoginEntity for login: ajbily@grbinc.com.

The following exception occured: Login1_Authenticate

Stack Trace: at SD.LLBLGen.Pro.TypeConverters.Int16ToInt32TypeConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value) in C:\Work\RBS\AssistWeb\Framework\Business.Lower\TypeConverter\Int16ToInt32TypeConverter\Int16ToInt32TypeConverter.cs:line 40 at SD.LLBLGen.Pro.ORMSupportClasses.FieldUtilities.DetermineValueToSet(IEntityFieldCore fieldToSet, IFieldPersistenceInfo persistenceInfo, Object currentValue, Boolean& isConverted) in c:\Myprojects\VS.NET Projects\LLBLGen Pro v3.1\Frameworks\LLBLGen Pro\RuntimeLibraries\ORMSupportClasses\Miscellaneous\FieldUtilities.cs:line 124 at SD.LLBLGen.Pro.ORMSupportClasses.DataAccessAdapterBase.ReadRowIntoFields(Object[] values, IEntityFields2 rowDestination, List1 fieldIndexToOrdinal, IFieldPersistenceInfo[] fieldsPersistenceInfo) in c:\Myprojects\VS.NET Projects\LLBLGen Pro v3.1\Frameworks\LLBLGen Pro\RuntimeLibraries\ORMSupportClasses\AdapterSpecific\DataAccessAdapterBase.cs:line 5050 at SD.LLBLGen.Pro.ORMSupportClasses.DataAccessAdapterBase.CreateEntityInstanceFromReaderRow(IEntityFactory2 entityFactory, IFieldPersistenceInfo[] fieldsPersistenceInfo, Int32 numberOfFieldsInQuery, InheritanceHierarchyType typeOfHierarchy, Dictionary2 hierarchyFieldAliasesToOrdinals, List1 fieldIndexToOrdinal, Dictionary2 entityFieldStartIndexesPerEntity, Boolean hasExcludedFields, IFieldPersistenceInfo[] persistenceInfosForRowReader, Object[] valuesOfRow, IEntityFactory2& entityFactoryToUse) in c:\Myprojects\VS.NET Projects\LLBLGen Pro v3.1\Frameworks\LLBLGen Pro\RuntimeLibraries\ORMSupportClasses\AdapterSpecific\DataAccessAdapterBase.cs:line 5717 at SD.LLBLGen.Pro.ORMSupportClasses.DataAccessAdapterBase.ExecuteMultiRowRetrievalQuery(IRetrievalQuery queryToExecute, IEntityFactory2 entityFactory, IEntityCollection2 collectionToFill, IFieldPersistenceInfo[] fieldsPersistenceInfo, Boolean allowDuplicates, IEntityFields2 fieldsUsedForQuery) in c:\Myprojects\VS.NET Projects\LLBLGen Pro v3.1\Frameworks\LLBLGen Pro\RuntimeLibraries\ORMSupportClasses\AdapterSpecific\DataAccessAdapterBase.cs:line 651 at SD.LLBLGen.Pro.ORMSupportClasses.DataAccessAdapterBase.FetchEntityCollectionInternal(IEntityCollection2 collectionToFill, IRelationPredicateBucket& filterBucket, Int32 maxNumberOfItemsToReturn, ISortExpression sortClauses, ExcludeIncludeFieldsList excludedIncludedFields, Int32 pageNumber, Int32 pageSize) in c:\Myprojects\VS.NET Projects\LLBLGen Pro v3.1\Frameworks\LLBLGen Pro\RuntimeLibraries\ORMSupportClasses\AdapterSpecific\DataAccessAdapterBase.cs:line 4577 at SD.LLBLGen.Pro.ORMSupportClasses.DataAccessAdapterBase.FetchPrefetchPath(IEntityCollection2 rootEntities, IRelationPredicateBucket filterBucket, Int64 maxNumberOfItemsToReturn, ISortExpression sortClauses, IPrefetchPath2 prefetchPath, Boolean forceParameterizedPPath) in c:\Myprojects\VS.NET Projects\LLBLGen Pro v3.1\Frameworks\LLBLGen Pro\RuntimeLibraries\ORMSupportClasses\AdapterSpecific\DataAccessAdapterBase.cs:line 5216 at SD.LLBLGen.Pro.ORMSupportClasses.DataAccessAdapterBase.FetchPrefetchPath(IEntityCollection2 rootEntities, IRelationPredicateBucket filterBucket, Int64 maxNumberOfItemsToReturn, ISortExpression sortClauses, IPrefetchPath2 prefetchPath) in c:\Myprojects\VS.NET Projects\LLBLGen Pro v3.1\Frameworks\LLBLGen Pro\RuntimeLibraries\ORMSupportClasses\AdapterSpecific\DataAccessAdapterBase.cs:line 5089 at SD.LLBLGen.Pro.ORMSupportClasses.DataAccessAdapterBase.FetchAdditionalPrefetchPath(IPrefetchPath2 prefetchPath, Context contextToUse, IEntity2 fetchedEntity, IRelationPredicateBucket filterToUse) in c:\Myprojects\VS.NET Projects\LLBLGen Pro v3.1\Frameworks\LLBLGen Pro\RuntimeLibraries\ORMSupportClasses\AdapterSpecific\DataAccessAdapterBase.cs:line 5823 at SD.LLBLGen.Pro.ORMSupportClasses.DataAccessAdapterBase.FetchEntityUsingFilter(IEntity2 entityToFetch, IPrefetchPath2 prefetchPath, Context contextToUse, IRelationPredicateBucket filter, ExcludeIncludeFieldsList excludedIncludedFields) in c:\Myprojects\VS.NET Projects\LLBLGen Pro v3.1\Frameworks\LLBLGen Pro\RuntimeLibraries\ORMSupportClasses\AdapterSpecific\DataAccessAdapterBase.cs:line 4849 at SD.LLBLGen.Pro.ORMSupportClasses.DataAccessAdapterBase.FetchEntityUsingUniqueConstraint(IEntity2 entityToFetch, IPredicateExpression uniqueConstraintFilter, IPrefetchPath2 prefetchPath, Context contextToUse, ExcludeIncludeFieldsList excludedIncludedFields) in c:\Myprojects\VS.NET Projects\LLBLGen Pro v3.1\Frameworks\LLBLGen Pro\RuntimeLibraries\ORMSupportClasses\AdapterSpecific\DataAccessAdapterBase.cs:line 1917 at SD.LLBLGen.Pro.ORMSupportClasses.DataAccessAdapterBase.FetchEntityUsingUniqueConstraint(IEntity2 entityToFetch, IPredicateExpression uniqueConstraintFilter, IPrefetchPath2 prefetchPath) in c:\Myprojects\VS.NET Projects\LLBLGen Pro v3.1\Frameworks\LLBLGen Pro\RuntimeLibraries\ORMSupportClasses\AdapterSpecific\DataAccessAdapterBase.cs:line 1876 at Grb.Framework.Business.DomainManager.GetLoginEntity(String loginName) in c:\Work\RBS\AssistWeb\Framework\Business\DomainManager.vb:line 90 at Grb.Framework.Business.DomainManager.GetLoginEntity(String loginName) in c:\Work\RBS\AssistWeb\Framework\Business\DomainManager.vb:line 99 at Grb.PresentationAssist.Login.Login1_Authenticate(Object sender, AuthenticateEventArgs e) in C:\Work\RBS\AssistWeb\Presentation\Assist\Login.aspx.vb:line 191

Any idea ?

Thanks for your time...

daelmo avatar
daelmo
Support Team
Posts: 8245
Joined: 28-Nov-2005
# Posted on: 16-Dec-2011 03:48:14   

It could be the value it's trying to convert is actually NULL. Is that field nullable? Maybe you have to add logic in case the value is null.

if (value == null)
{
     return null;
}

Maybe if you debug very close to the TypeConverter you can determine the real problem.

David Elizondo | LLBLGen Support Team