需要帮助!
我试图使用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;
}
}
答案 0 :(得分:1)
(基于注释中的扩展信息。)大多数IDbConnection
实现将(正确)将SQL varbinary
“转换”为C#byte[]
。 byte[]
和string
不能立即转换,因为natural language text is complex。
在基础存储过程可用之前,您需要使用一种编码将string
转换为byte[]
,反之亦然。
请参见Microsoft Docs。结果:选择编码后,您将使用GetBytes(string)
和GetString(byte[])
方法对存储过程中的文本进行编码/解码。