sql-server - Sql Server Always Encrypt - 从 .net 核心代码访问时出错 - 数据类型 varchar(50) ... 在等于运算符中不兼容
问题描述
在 Sql Server 中,当我尝试使用以下代码访问表时,表中的某些列已加密:
string connectionString = "Server=xxx;Database=xxx;user id=xxx;password=xxx;Column Encryption Setting=Enabled";
using (SqlConnection connection = new SqlConnection(connectionString))
using (SqlCommand cmd = connection.CreateCommand())
{
connection.Open();
cmd.CommandText = @"SELECT * FROM PersonSample WHERE Postcode=@Postcode";
SqlParameter parameter = new SqlParameter("@Postcode", "AB10 6EN");
cmd.Parameters.Add(parameter);
using (SqlDataReader reader = cmd.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
Console.WriteLine(@"{0}, {1}, {2}, {3}, {4}", reader[0], reader[1], reader[2], reader[3], reader[4]);
}
}
}
}
我在使用 cmd.ExecuteReader 时遇到错误:
Microsoft.Data.SqlClient.SqlException: 'The data types varchar(50) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', column_encryption_key_database_name = 'VerifiEncryptTest') collation_name = 'Latin1_General_BIN2' and nvarchar(8) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', column_encryption_key_database_name = 'VerifiEncryptTest')
are incompatible in the equal to operator.
Statement(s) could not be prepared.'
我读过“确定性加密必须对字符列使用带有 binary2 排序顺序的列排序规则。”,有问题的列 Postcode 的排序规则类型为“Latin1_General_BIN2”,肯定是 binary2 吗?
解决方案
我找到了答案,我需要像这样添加参数(所以包括 VarChar Sql 类型):
SqlParameter parameter = new SqlParameter("@Postcode", SqlDbType.VarChar, 50);
parameter.Value = "AB10 6EN";
推荐阅读
- visual-studio-code - 如何在 Visual Studio Code 中查看预定义变量的内容
- php - 如何更改小部件菜单容器
- ajax - 加载形式 Fragment thymelef ajax spring boot
- blockchain - 如何通过 RPC 获取以太坊内部交易列表/合约交易列表?
- amazon-web-services - 如何为 AWS 实例添加 AWS 入站限制
- jquery - 如何删除默认显示在标签之间的所有空白
- graphql - 如何设置 Apollo GraphQL 服务器以接受一个对象作为突变的变量?
- sql - 过滤 json 值,而不考虑 PostgreSQL 中的键
- r - 没有从网络抓取中将值输入到数据框中
- python-3.x - onvif 从 ip-camera 检索日志文件