You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.5 KiB
76 lines
2.5 KiB
1 month ago
|
using System;
|
||
|
using System.Data;
|
||
|
|
||
|
namespace Dapper
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// This class represents a SQL string, it can be used if you need to denote your parameter is a Char vs VarChar vs nVarChar vs nChar
|
||
|
/// </summary>
|
||
|
public sealed class DbString : SqlMapper.ICustomQueryParameter
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// Default value for IsAnsi.
|
||
|
/// </summary>
|
||
|
public static bool IsAnsiDefault { get; set; }
|
||
|
|
||
|
/// <summary>
|
||
|
/// A value to set the default value of strings
|
||
|
/// going through Dapper. Default is 4000, any value larger than this
|
||
|
/// field will not have the default value applied.
|
||
|
/// </summary>
|
||
|
public const int DefaultLength = 4000;
|
||
|
|
||
|
/// <summary>
|
||
|
/// Create a new DbString
|
||
|
/// </summary>
|
||
|
public DbString()
|
||
|
{
|
||
|
Length = -1;
|
||
|
IsAnsi = IsAnsiDefault;
|
||
|
}
|
||
|
/// <summary>
|
||
|
/// Ansi vs Unicode
|
||
|
/// </summary>
|
||
|
public bool IsAnsi { get; set; }
|
||
|
/// <summary>
|
||
|
/// Fixed length
|
||
|
/// </summary>
|
||
|
public bool IsFixedLength { get; set; }
|
||
|
/// <summary>
|
||
|
/// Length of the string -1 for max
|
||
|
/// </summary>
|
||
|
public int Length { get; set; }
|
||
|
/// <summary>
|
||
|
/// The value of the string
|
||
|
/// </summary>
|
||
|
public string Value { get; set; }
|
||
|
/// <summary>
|
||
|
/// Add the parameter to the command... internal use only
|
||
|
/// </summary>
|
||
|
/// <param name="command"></param>
|
||
|
/// <param name="name"></param>
|
||
|
public void AddParameter(IDbCommand command, string name)
|
||
|
{
|
||
|
if (IsFixedLength && Length == -1)
|
||
|
{
|
||
|
throw new InvalidOperationException("If specifying IsFixedLength, a Length must also be specified");
|
||
|
}
|
||
|
var param = command.CreateParameter();
|
||
|
param.ParameterName = name;
|
||
|
#pragma warning disable 0618
|
||
|
param.Value = SqlMapper.SanitizeParameterValue(Value);
|
||
|
#pragma warning restore 0618
|
||
|
if (Length == -1 && Value != null && Value.Length <= DefaultLength)
|
||
|
{
|
||
|
param.Size = DefaultLength;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
param.Size = Length;
|
||
|
}
|
||
|
param.DbType = IsAnsi ? (IsFixedLength ? DbType.AnsiStringFixedLength : DbType.AnsiString) : (IsFixedLength ? DbType.StringFixedLength : DbType.String);
|
||
|
command.Parameters.Add(param);
|
||
|
}
|
||
|
}
|
||
|
}
|