【发布时间】:2017-09-08 15:11:46
【问题描述】:
需要帮助!
我试图使用 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();
}
ExecuteQuery 函数用于封装 dapper Query 函数
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;
}
}
【问题讨论】:
-
您确定
Utility.DecryptData返回varchar?如果是varbinary,则底层 .NET 类型(取决于在 Dapper 下运行的IDbConnection提供程序)可能是byte[]。 -
嗨!是的,它是一个 varbinary,但我将它转换为字符串。