dapper C#的可逆问题#

时间:2017-09-08 15:11:47

标签: c# orm dapper

需要帮助!

我试图使用Dapper从数据库中获取值,但是当我执行查询<>指令我收到“对象必须实现Iconvertible”异常。我做错了什么以及如何解决它?

当我调用Decrypt方法并调用ExceuteQuery函数时发生错误。

代码

程序

ServiceSettingsEntity appSetting = MainRepository.GetConfigSettings(appSettingKey.ToString(), companyCode);


if (appSetting.IsEncrypted)
    appSetting.Value = MainRepository.Decrypt(appSetting.Value);
    return appSetting.Value.Trim();

解密功能

public static string Decrypt(string encryptedData)
{

    CommandSettings commandSettings = new CommandSettings
    {
        CommandText = @"[Utility].[DecryptData]",
        CommandType = CommandType.StoredProcedure,
        Parameters = new
                        {
                          @DataToDecrypt = encryptedData
                        }};

    return new MsSqlProviderBase(EdxDbConnectionString, 
                 commandSettings).ExecuteQuery<string>().FirstOrDefault();
}

用于封装dapper Query&lt;&gt;的ExecuteQuery函数功能

public List<T> ExecuteQuery<T>()
{
    using (IDbConnection dbConnection = DbConnection)
    {
        List<T> qResult = dbConnection.Query<T>(CommandSettings.CommandText, 
                             CommandSettings.Parameters,                     
                             commandTimeout: CommandSettings.CommandTimeout,
                             commandType: 
                                CommandSettings.CommandType).ToList();

return qResult;
    }
} 

1 个答案:

答案 0 :(得分:1)

(基于注释中的扩展信息。)大多数IDbConnection实现将(正确)将SQL varbinary“转换”为C#byte[]byte[]string不能立即转换,因为natural language text is complex

在基础存储过程可用之前,您需要使用一种编码将string转换为byte[],反之亦然。

请参见Microsoft Docs。结果:选择编码后,您将使用GetBytes(string)GetString(byte[])方法对存储过程中的文本进行编码/解码。