【问题标题】:SQL Server 2016 Always Encrypted column inner join c#SQL Server 2016 Always Encrypted 列内连接 c#
【发布时间】:2016-10-27 07:01:40
【问题描述】:

如何使用 Always Encrypted 列执行连接?我试过这个(name是加密列)

sqlcon();
cmd = new SqlCommand("select determin.name as name from determin inner join determinjoin on determin.name = determinjoin.name ", con);

SqlDataReader dr = cmd.ExecuteReader();

while (dr.Read())
{
    Console.WriteLine(dr["name"]);
}

Console.ReadLine();
con.Close();

我收到此错误:

附加信息:使用 (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto4', column_encryption_key_database_name = 'depdb') collat​​ion_name = 'Latin1_General_BIN2' 和 varchar 加密的数据类型 varchar(20) 不适用等于运算符。

【问题讨论】:

    标签: c# sql sql-server-2016 always-encrypted


    【解决方案1】:

    您必须在连接字符串中将 ColumnEncryptionSetting 值设置为 Enabled,才能使其正常工作。

    请参考以下链接。

    https://msdn.microsoft.com/en-us/library/mt757097.aspx

    应在 dotnet 4.6 及更高版本上使用大多数受支持的功能。请通过我的 cmets 中的私人链接浏览一些有用的信息

    【讨论】:

    • 是的,我启用了。选择、更新、插入、删除命令工作正常。但无法执行加入。
    • Hmmm.. 文档说....一旦为应用程序查询启用 Always Encrypted,您就可以使用标准 ADO.NET API(请参阅在 ADO.NET 中检索和修改数据)
    • 你有where条件
    • 是的。在哪里工作。我将值作为参数发送。例如:cmd.CommandText = @"从确定名称中删除 =@Name"; SqlParameter Breed = cmd.CreateParameter(); Breed.ParameterName = @"名称"; cmd.Parameters.Add(品种); cmd.ExecuteNonQuery();但在 JOIN 的情况下,它会显示上述错误。
    • 奇怪。会尝试探索
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 2017-04-23
    • 2020-10-11
    相关资源
    最近更新 更多