@@ -112,7 +112,7 @@ protected override void InitializeParameter(DbParameter dbParam, string name, Sq
112112 case DbType . AnsiStringFixedLength :
113113 dbParam . Size = IsAnsiText ( dbParam , sqlType )
114114 ? MsSql2000Dialect . MaxSizeForAnsiClob
115- : MsSql2000Dialect . MaxSizeForLengthLimitedAnsiString ;
115+ : IsChar ( dbParam , sqlType ) ? sqlType . Length : MsSql2000Dialect . MaxSizeForLengthLimitedAnsiString ;
116116 break ;
117117 case DbType . Binary :
118118 dbParam . Size = IsBlob ( dbParam , sqlType )
@@ -130,7 +130,7 @@ protected override void InitializeParameter(DbParameter dbParam, string name, Sq
130130 case DbType . StringFixedLength :
131131 dbParam . Size = IsText ( dbParam , sqlType )
132132 ? MsSql2000Dialect . MaxSizeForClob
133- : MsSql2000Dialect . MaxSizeForLengthLimitedString ;
133+ : IsChar ( dbParam , sqlType ) ? sqlType . Length : MsSql2000Dialect . MaxSizeForLengthLimitedString ;
134134 break ;
135135 case DbType . DateTime2 :
136136 dbParam . Size = MsSql2000Dialect . MaxDateTime2 ;
@@ -199,6 +199,18 @@ protected static bool IsBlob(DbParameter dbParam, SqlType sqlType)
199199 return sqlType is BinaryBlobSqlType || DbType . Binary == dbParam . DbType && sqlType . LengthDefined &&
200200 sqlType . Length > MsSql2000Dialect . MaxSizeForLengthLimitedBinary ;
201201 }
202+
203+ /// <summary>
204+ /// Interprets if a parameter is a character (for the purposes of setting its default size)
205+ /// </summary>
206+ /// <param name="dbParam">The parameter</param>
207+ /// <param name="sqlType">The <see cref="SqlType" /> of the parameter</param>
208+ /// <returns>True, if the parameter should be interpreted as a character, otherwise False</returns>
209+ protected static bool IsChar ( DbParameter dbParam , SqlType sqlType )
210+ {
211+ return sqlType . LengthDefined && sqlType . Length == 1 &&
212+ ( dbParam . DbType == DbType . StringFixedLength || dbParam . DbType == DbType . AnsiStringFixedLength ) ;
213+ }
202214
203215 /// <inheritdoc />
204216 public override IResultSetsCommand GetResultSetsCommand ( ISessionImplementor session )
0 commit comments