sql-server - 无法将 varchar 空/空值插入或更新到始终加密的列中
问题描述
我正在尝试使用 sql 客户端将 C# 中的空值""
或null
值更新为始终加密的列;但是我得到了错误。如果我传递一个空格,它会起作用" "
。
错误:
使用 (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK', column_encryption_key_database_name = 'db') 加密的 nvarchar(4000) 与使用 (encryption_type = 'DETERMINISTIC', encryption_algorithm_name 加密的 nvarchar(50) 不兼容AEAD_AES_256_CBC_HMAC_SHA_256',column_encryption_key_name = 'CEK',column_encryption_key_database_name = 'db')
解决方案
工作代码如下:
SqlConnection connection = new SqlConnection(dbString);
connection.Open();
SqlParameter p = new SqlParameter("@lastname", System.Data.SqlDbType.NVarChar, 50);
p.Value = string.Empty;
SqlCommand command = new SqlCommand("update associate set lastname=@lastname", connection);
command.Parameters.Add(p);
command.ExecuteNonQuery();
connection.Close();
问题是客户端参数定义必须与服务器上的加密列类型完全匹配。
推荐阅读
- flutter - ScanStreamTransformer 替代方案,每个事件调用一次,而不是每个侦听器调用一次
- bash - 带有不记名令牌的 cURL POST 请求导致“无法解析主机:POST”
- xamarin.forms - iOS(Xamarin Forms)中的高度按钮在文本标签换行时不调整大小(我想要动态大小)
- python-3.x - scipy.special.hyp1f1 的类型错误
- redis - Redis - 当不再主动写入值时触发事件的任何方式?
- r - 在以下情况下如何使用 R 管道运算符(%>%)
- jmeter - Jmeter 440 错误代码。如何解决此错误?
- android - Android 将领域适配为 64 位
- windows - Windows 10 不信任 Gradle Launch4J EXE
- gatling - 如何创建一个每小时达到峰值/峰值并在 10 分钟后恢复正常的加特林模拟?