始终使用十进制加密(18,2)

问题描述:

我正在使用新的SQL Server 2016功能 - 始终加密。这是非常酷和简单的技术 - 但不是小数类型。始终使用十进制加密(18,2)

当我插入值,我越来越喜欢这个(ZP_Test - 我的数据库名)错误:

操作数类型冲突:以(encryption_type的= '随机' 加密十进制(4,2), encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256',column_encryption_key_name = 'ColomnKey',column_encryption_key_database_name = 'ZP_Test')是与(将encryption_type = '随机',encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256',column_encryption_key_name = 'ColomnKey' 加密十进制(18,2)不相容,column_encryption_key_database_name = 'ZP_Test')
声明无法准备。

我的API是用C#编写的,请参阅我的代码,也许你知道解决方案。

SQL查询的SQL,当错误发生时创建表

CREATE TABLE [dbo].[EmpInfo] 
(
    [EmpID] [int] NULL, 
    [NatID] [nvarchar](max) COLLATE Cyrillic_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [ColomnKey], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL, 
    [Amount] [decimal](18, 2) ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [ColomnKey], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL 
) ON [PRIMARY] 
GO 

C#代码示例

command.CommandText = "INSERT INTO EmpInfo(EmpID, NatID, Amount) VALUES (@key, @ssn, @amount)"; 

command.Parameters.AddWithValue("@key", key); 
command.Parameters.AddWithValue("@ssn", DBNull.Value); 
command.Parameters.AddWithValue("@amount", Convert.ToDecimal("11.00")); 
command.ExecuteNonQuery(); 

跟踪 -

exec sp_describe_parameter_encryption N'INSERT INTO EmpInfo(EmpID, NatID, Amount, AmountDec) VALUES (@key, @ssn, @amount, @amountDec)',N'@key int,@ssn nvarchar(7),@amount decimal(4,2)' 

请注明小数的精度和规模使用SqlParamater对象如下

SqlParameter param = new SqlParameter("@amount", SqlDbType.Decimal); 
param.Precision = 18; 
param.Scale = 2; 
command.Parameters.Add(param);