148 lines
5.5 KiB
C#
148 lines
5.5 KiB
C#
using System;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
using System.Globalization;
|
|
using SDA.DataProvider.Core;
|
|
|
|
namespace SDA.DataProvider.MSSQLWrappers
|
|
{
|
|
class MSSQLCommandParameterWrapper : SDACommandParameterWrapper
|
|
{
|
|
internal SqlParameter Parameter;
|
|
|
|
internal MSSQLCommandParameterWrapper(SqlParameter parameter)
|
|
{
|
|
Parameter = parameter;
|
|
}
|
|
|
|
protected override IDbDataParameter WrappedParameter
|
|
{
|
|
get
|
|
{
|
|
return Parameter;
|
|
}
|
|
}
|
|
|
|
public override object Value
|
|
{
|
|
get
|
|
{
|
|
return Parameter.Value;
|
|
}
|
|
set
|
|
{
|
|
if (value is bool boolean)
|
|
{
|
|
Parameter.Value = boolean ? 'T' : 'F';
|
|
}
|
|
else
|
|
{
|
|
Parameter.Value = value;
|
|
}
|
|
}
|
|
}
|
|
|
|
public override SDADBType DBType
|
|
{
|
|
get
|
|
{
|
|
return MSSQLParameterTypeConverter.ConvertSqlDbTypeToSDADBType(Parameter.SqlDbType);
|
|
}
|
|
set
|
|
{
|
|
Parameter.SqlDbType = MSSQLParameterTypeConverter.ConvertSDADBTypeToSqlDbType(value);
|
|
}
|
|
}
|
|
}
|
|
|
|
class MSSQLParameterTypeConverter
|
|
{
|
|
public static SqlDbType ConvertSDADBTypeToSqlDbType(SDADBType type)
|
|
{
|
|
switch (type)
|
|
{
|
|
case SDADBType.Int:
|
|
return SqlDbType.Int;
|
|
case SDADBType.String:
|
|
return SqlDbType.NVarChar;
|
|
case SDADBType.Binary:
|
|
return SqlDbType.Image;
|
|
case SDADBType.Char:
|
|
return SqlDbType.NChar;
|
|
case SDADBType.DateTime:
|
|
return SqlDbType.DateTime;
|
|
case SDADBType.Double:
|
|
return SqlDbType.Float;
|
|
case SDADBType.Boolean:
|
|
return SqlDbType.Char;
|
|
case SDADBType.LongString:
|
|
return SqlDbType.NText;
|
|
case SDADBType.LongInt:
|
|
return SqlDbType.BigInt;
|
|
case SDADBType.NonUnicodeString:
|
|
return SqlDbType.VarChar;
|
|
case SDADBType.Guid:
|
|
return SqlDbType.UniqueIdentifier;
|
|
default:
|
|
throw new NotImplementedException(type.ToString());
|
|
}
|
|
}
|
|
|
|
public static SDADBType ConvertSqlDbTypeToSDADBType(SqlDbType type)
|
|
{
|
|
switch (type)
|
|
{
|
|
case SqlDbType.BigInt:
|
|
return SDADBType.LongInt;
|
|
case SqlDbType.Binary:
|
|
return SDADBType.Binary;
|
|
case SqlDbType.Bit:
|
|
return SDADBType.Boolean;
|
|
case SqlDbType.Char:
|
|
return SDADBType.Char;
|
|
case SqlDbType.DateTime:
|
|
return SDADBType.DateTime;
|
|
case SqlDbType.Decimal:
|
|
throw new NotSupportedException(string.Format(CultureInfo.InvariantCulture, "Conversion from '{0}' is not supported.", type));
|
|
case SqlDbType.Float:
|
|
return SDADBType.Double;
|
|
case SqlDbType.Image:
|
|
return SDADBType.Binary;
|
|
case SqlDbType.Int:
|
|
return SDADBType.Int;
|
|
case SqlDbType.Money:
|
|
throw new NotSupportedException(string.Format(CultureInfo.InvariantCulture, "Conversion from '{0}' is not supported.", type));
|
|
case SqlDbType.NChar:
|
|
return SDADBType.Char;
|
|
case SqlDbType.NText:
|
|
return SDADBType.LongString;
|
|
case SqlDbType.NVarChar:
|
|
return SDADBType.String;
|
|
case SqlDbType.Real:
|
|
return SDADBType.Double;
|
|
case SqlDbType.SmallDateTime:
|
|
return SDADBType.DateTime;
|
|
case SqlDbType.SmallInt:
|
|
return SDADBType.Int;
|
|
case SqlDbType.SmallMoney:
|
|
throw new NotSupportedException(string.Format(CultureInfo.InvariantCulture, "Conversion from '{0}' is not supported.", type));
|
|
case SqlDbType.Text:
|
|
return SDADBType.LongString;
|
|
case SqlDbType.Timestamp:
|
|
throw new NotSupportedException(string.Format(CultureInfo.InvariantCulture, "Conversion from '{0}' is not supported.", type));
|
|
case SqlDbType.TinyInt:
|
|
throw new NotSupportedException(string.Format(CultureInfo.InvariantCulture, "Conversion from '{0}' is not supported.", type));
|
|
case SqlDbType.UniqueIdentifier:
|
|
return SDADBType.Guid;
|
|
case SqlDbType.VarBinary:
|
|
throw new NotSupportedException(string.Format(CultureInfo.InvariantCulture, "Conversion from '{0}' is not supported.", type));
|
|
case SqlDbType.VarChar:
|
|
return SDADBType.NonUnicodeString;
|
|
case SqlDbType.Variant:
|
|
throw new NotSupportedException(string.Format(CultureInfo.InvariantCulture, "Conversion from '{0}' is not supported.", type));
|
|
default:
|
|
throw new NotImplementedException(type.ToString());
|
|
}
|
|
}
|
|
}
|
|
}
|