kreta/Sda.DataProvider/Wrappers/MSSQL/MSSQLCommandParameterWrapper.cs
2024-03-13 00:33:46 +01:00

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());
}
}
}
}