// From class Starcounter.Db. Added CultureInfo.InvariantCulture and NumberFormatInfo.InvariantInfo. internal static String CreateObjectString(ITypeBinding typeBind, IObjectView currentObj) { IPropertyBinding propBind = null; String result = FieldSeparator; for (Int32 i = 0; i < typeBind.PropertyCount; i++) { propBind = typeBind.GetPropertyBinding(i); switch (propBind.TypeCode) { case DbTypeCode.Binary: Nullable<Binary> binValue = currentObj.GetBinary(i); if (binValue == null) result += Db.NullString; else result += BinaryToHex(binValue.Value); break; case DbTypeCode.Boolean: Nullable<Boolean> blnValue = currentObj.GetBoolean(i); if (blnValue == null) result += Db.NullString; else result += blnValue.Value.ToString(); break; case DbTypeCode.Byte: Nullable<Byte> byteValue = currentObj.GetByte(i); if (byteValue == null) result += Db.NullString; else result += byteValue.Value.ToString(NumberFormatInfo.InvariantInfo); break; case DbTypeCode.DateTime: Nullable<DateTime> dtmValue = currentObj.GetDateTime(i); if (dtmValue == null) result += Db.NullString; else result += dtmValue.Value.ToString("u", DateTimeFormatInfo.InvariantInfo); break; case DbTypeCode.Decimal: Nullable<Decimal> decValue = currentObj.GetDecimal(i); if (decValue == null) result += Db.NullString; else result += decValue.Value.ToString(NumberFormatInfo.InvariantInfo); break; case DbTypeCode.Double: Nullable<Double> dblValue = currentObj.GetDouble(i); if (dblValue == null) result += Db.NullString; else result += dblValue.Value.ToString(NumberFormatInfo.InvariantInfo); break; case DbTypeCode.Int16: Nullable<Int16> int16Value = currentObj.GetInt16(i); if (int16Value == null) result += Db.NullString; else result += int16Value.Value.ToString(NumberFormatInfo.InvariantInfo); break; case DbTypeCode.Int32: Nullable<Int32> int32Value = currentObj.GetInt32(i); if (int32Value == null) result += Db.NullString; else result += int32Value.Value.ToString(NumberFormatInfo.InvariantInfo); break; case DbTypeCode.Int64: Nullable<Int64> int64Value = currentObj.GetInt64(i); if (int64Value == null) result += Db.NullString; else result += int64Value.Value.ToString(NumberFormatInfo.InvariantInfo); break; case DbTypeCode.Object: IObjectView objValue = currentObj.GetObject(i); if (objValue == null) result += Db.NullString; else { if (objValue is IObjectProxy) //result += DbHelper.GetObjectID(objValue as Entity).ToString(); result += Utilities.GetObjectIdString(objValue); else result += objValue.ToString(); } break; case DbTypeCode.SByte: Nullable<SByte> sbyteValue = currentObj.GetSByte(i); if (sbyteValue == null) result += Db.NullString; else result += sbyteValue.Value.ToString(NumberFormatInfo.InvariantInfo); break; case DbTypeCode.Single: Nullable<Single> sngValue = currentObj.GetSingle(i); if (sngValue == null) result += Db.NullString; else result += sngValue.Value.ToString(NumberFormatInfo.InvariantInfo); break; case DbTypeCode.String: String strValue = currentObj.GetString(i); if (strValue == null) result += Db.NullString; else result += strValue; break; case DbTypeCode.UInt16: Nullable<UInt16> uint16Value = currentObj.GetUInt16(i); if (uint16Value == null) result += Db.NullString; else result += uint16Value.Value.ToString(NumberFormatInfo.InvariantInfo); break; case DbTypeCode.UInt32: Nullable<UInt32> uint32Value = currentObj.GetUInt32(i); if (uint32Value == null) result += Db.NullString; else result += uint32Value.Value.ToString(NumberFormatInfo.InvariantInfo); break; case DbTypeCode.UInt64: Nullable<UInt64> uint64Value = currentObj.GetUInt64(i); if (uint64Value == null) result += Db.NullString.ToString(NumberFormatInfo.InvariantInfo); else result += uint64Value.Value.ToString(NumberFormatInfo.InvariantInfo); break; default: throw new Exception("Incorrect TypeCode: " + propBind.TypeCode); } result += FieldSeparator; } return result; }