首页 > 代码库 > Dapper.net Insert mssql unicode 乱码问题

Dapper.net Insert mssql unicode 乱码问题

1、效果:

技术分享

2、处理方法:

 /// <summary>
        /// insert single sql
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="sql"></param>
        /// <param name="param"></param>
        /// <param name="connectionString"></param>
        /// <returns></returns>
        public static int Insert<T>(string sql, dynamic param = null, string connectionString = null) where T : class, new()
        {
            using (IDbConnection conn = OpenConnection(connectionString))
            {
                return conn.Execute(sql, (object)param,null,null,null);
            }
        }
  public static readonly string InsertSql = @"Insert into SpreadApiErrorMsgs(Id,ControllerName,ActionName,Message,SoluWay,CreateDate)
                                                    values(@Id,@ControllerName,@ActionName,@Message,@SoluWay,@CreateDate)";
        /// <summary>
        /// insert single sql
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="sql"></param>
        /// <param name="param"></param>
        /// <param name="connectionString"></param>
        /// <returns></returns>
        public static int Insert<T>(string sql, dynamic param = null, string connectionString = null) where T : class, new()
        {
            using (IDbConnection conn = OpenConnection(connectionString))
            {
                return conn.Execute(sql, (object)param,null,null,null);
            }
        }

 

PS: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>
    sealed partial class DbString : Reasonable.Spread.Dapper.SqlMapper.ICustomQueryParameter
    {
        /// <summary>
        /// Create a new DbString
        /// </summary>
        public DbString() { Length = -1; }
        /// <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;
            param.Value = (object)Value ?? DBNull.Value;
            if (Length == -1 && Value != null && Value.Length <= 4000)
            {
                param.Size = 4000;
            }
            else
            {
                param.Size = Length;
            }
            param.DbType = IsAnsi ? (IsFixedLength ? DbType.AnsiStringFixedLength : DbType.AnsiString) : (IsFixedLength ? DbType.StringFixedLength : DbType.String);
            command.Parameters.Add(param);
        }
    }

 

Dapper.net Insert mssql unicode 乱码问题