#region Apache Notice /***************************************************************************** * $Header: $ * $Revision: $ * $Date: $ * * iBATIS.NET Data Mapper * Copyright (C) 2004 - Gilles Bayon * * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ********************************************************************************/ #endregion #region Using using System; using System.Data; using IBatisNet.DataMapper.Configuration.ParameterMapping; using IBatisNet.DataMapper.Configuration.ResultMapping; #endregion namespace IBatisNet.DataMapper.TypeHandlers { /// /// Implementation of TypeHandler for dealing with unknown types /// internal class UnknownTypeHandler : BaseTypeHandler { private TypeHandlerFactory _factory = null; /// /// Constructor to create via a factory /// /// the factory to associate this with public UnknownTypeHandler(TypeHandlerFactory factory) { _factory = factory; } /// /// Performs processing on a value before it is used to set /// the parameter of a IDbCommand. /// /// /// The value to be set /// Data base type public override void SetParameter(IDataParameter dataParameter, object parameterValue, string dbType) { if (parameterValue!=null) { ITypeHandler handler = _factory.GetTypeHandler( parameterValue.GetType(), dbType ); handler.SetParameter(dataParameter, parameterValue, dbType); } else { // When sending a null parameter value to the server, // the user must specify DBNull, not null. dataParameter.Value = System.DBNull.Value; } } public override object GetValueByName(ResultProperty mapping, IDataReader dataReader) { int index = dataReader.GetOrdinal(mapping.ColumnName); if (dataReader.IsDBNull(index) == true) { return System.DBNull.Value; } else { return dataReader.GetValue(index); } } public override object GetValueByIndex(ResultProperty mapping, IDataReader dataReader) { if (dataReader.IsDBNull(mapping.ColumnIndex) == true) { return System.DBNull.Value; } else { return dataReader.GetValue(mapping.ColumnIndex); } } public override object ValueOf(Type type, string s) { return s; } public override object GetDataBaseValue(object outputValue, Type parameterType) { return outputValue; } public override bool IsSimpleType { get { return true; } } /// /// Compares two values (that this handler deals with) for equality /// /// one of the objects /// the other object as a String /// true if they are equal public override bool Equals(object obj, string str) { if (obj == null || str == null) { return obj == str; } else { ITypeHandler handler = _factory.GetTypeHandler(obj.GetType()); object castedObject = handler.ValueOf(obj.GetType(), str); return obj.Equals(castedObject); } } } }