C# helper class to convert SQL data types to a .NET data types.
// Description: Evaluate C# code and expression in T-SQL stored procedure, function and trigger.
// Website & Documentation: https://github.com/zzzprojects/Eval-SQL.NET
// Forum & Issues: https://github.com/zzzprojects/Eval-SQL.NET/issues
// License: https://github.com/zzzprojects/Eval-SQL.NET/blob/master/LICENSE
// More projects: http://www.zzzprojects.com/
// Copyright © ZZZ Projects Inc. 2014 - 2016. All rights reserved.
using System;
using System.Data.SqlTypes;
namespace Z.Expressions.SqlServer.Eval
{
public static class SqlTypeHelper
{
/// <summary>Converts a SQL value to a .NET value</summary>
/// <param name="value">The SQL Value.</param>
/// <returns>The .NET value converted from the SQL value.</returns>
public static object ConvertToType(object value)
{
var rValue = value;
switch (value.GetType().Name)
{
case "SqlBinary":
var valueBinary = (SqlBinary) value;
return valueBinary.IsNull ? null : valueBinary.Value;
case "SqlBoolean":
var valueBoolean = (SqlBoolean) value;
return valueBoolean.IsNull ? (bool?) null : valueBoolean.Value;
case "SqlByte":
var valueByte = (SqlByte) value;
return valueByte.IsNull ? (byte?) null : valueByte.Value;
case "SqlBytes":
var valueBinaries = (SqlBytes) value;
return valueBinaries.IsNull ? null : valueBinaries.Value;
case "SqlChars":
var valueChars = (SqlChars) value;
return valueChars.IsNull ? null : valueChars.Value;
case "SqlDateTime":
var valueDateTime = (SqlDateTime) value;
return valueDateTime.IsNull ? (DateTime?) null : valueDateTime.Value;
case "SqlDecimal":
var valueDecimal = (SqlDecimal) value;
return valueDecimal.IsNull ? (decimal?) null : valueDecimal.Value;
case "SqlDouble":
var valueDouble = (SqlDouble) value;
return valueDouble.IsNull ? (double?) null : valueDouble.Value;
case "SqlGuid":
var valueGuid = (SqlGuid) value;
return valueGuid.IsNull ? (Guid?) null : valueGuid.Value;
case "SqlInt16":
var valueInt16 = (SqlInt16) value;
return valueInt16.IsNull ? (short?) null : valueInt16.Value;
case "SqlInt32":
var valueInt32 = (SqlInt32) value;
return valueInt32.IsNull ? (int?) null : valueInt32.Value;
case "SqlInt64":
var valueInt64 = (SqlInt64) value;
return valueInt64.IsNull ? (long?) null : valueInt64.Value;
case "SqlMoney":
var valueMoney = (SqlMoney) value;
return valueMoney.IsNull ? (decimal?) null : valueMoney.Value;
case "SqlSingle":
var valueSingle = (SqlSingle) value;
return valueSingle.IsNull ? (float?) null : valueSingle.Value;
case "SqlString":
var valueString = (SqlString) value;
return valueString.IsNull ? null : valueString.Value;
case "SqlXml":
var valueXml = (SqlXml) value;
return valueXml.IsNull ? null : valueXml.Value;
case "DBNull":
return null;
}
return rValue;
}
public static Type GetNullableType(object value)
{
switch (value.GetType().Name)
{
case "SqlBinary":
return typeof (byte[]);
case "SqlBoolean":
return typeof (bool?);
case "SqlByte":
return typeof (byte?);
case "SqlBytes":
return typeof (byte[]);
case "SqlChars":
return typeof (char[]);
case "SqlDateTime":
return typeof (DateTime?);
case "SqlDecimal":
return typeof (decimal?);
case "SqlDouble":
return typeof (double?);
case "SqlGuid":
return typeof (Guid?);
case "SqlInt16":
return typeof (short?);
case "SqlInt32":
return typeof (int?);
case "SqlInt64":
return typeof (long?);
case "SqlMoney":
return typeof (decimal?);
case "SqlSingle":
return typeof (float?);
case "SqlString":
return typeof (string);
case "SqlXml":
return typeof (string);
case "DBNull":
return null;
}
return typeof (object);
}
}
}