private void InferOracleType (object value)
{
// Should we throw an exception here?
if (value == null || value == DBNull.Value)
return;
Type type = value.GetType ();
string exception = String.Format ("The parameter data type of {0} is invalid.", type.FullName);
switch (type.FullName) {
case "System.Int64":
SetOracleType (OracleType.Number, true);
break;
case "System.Boolean":
case "System.Byte":
SetOracleType (OracleType.Byte, true);
break;
case "System.String":
case "System.Data.OracleClient.OracleString":
SetOracleType (OracleType.VarChar, true);
break;
case "System.Data.OracleClient.OracleDateTime":
case "System.DateTime":
SetOracleType (OracleType.DateTime, true);
break;
case "System.Decimal":
case "System.Data.OracleClient.OracleNumber":
SetOracleType (OracleType.Number, true);
break;
case "System.Double":
SetOracleType (OracleType.Double, true);
break;
case "System.Byte[]":
case "System.Guid":
SetOracleType (OracleType.Raw, true);
break;
case "System.Int32":
SetOracleType (OracleType.Int32, true);
break;
case "System.Single":
SetOracleType (OracleType.Float, true);
break;
case "System.Int16":
SetOracleType (OracleType.Int16, true);
break;
case "System.DBNull":
break; //unable to guess type
case "System.Data.OracleClient.OracleLob":
SetOracleType (((OracleLob) value).LobType, true);
break;
default:
throw new ArgumentException (exception);
}
}