Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用始终按十进制加密(18,2)_Sql Server_Encryption_Sql Server 2016_Always Encrypted - Fatal编程技术网

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

Sql server 使用始终按十进制加密(18,2),sql-server,encryption,sql-server-2016,always-encrypted,Sql Server,Encryption,Sql Server 2016,Always Encrypted,我正在使用新的SQL Server 2016功能-始终加密。这是一种非常酷和简单的技术,但不是十进制类型 当我插入一个值时,我会得到如下错误(ZP\u Test-我的数据库名): 操作数类型冲突:使用(加密类型='RANDOMIZED',加密算法名称='AEAD\U AES\U 256\U CBC\U HMAC\U SHA\U 256',列加密\U密钥\U名称='ColumnKey',列加密\U密钥\U数据库\U名称='ZP\U Test')加密的十进制(4,2)与使用加密的十进制(18,2)不

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

当我插入一个值时,我会得到如下错误(
ZP\u Test
-我的数据库名):

操作数类型冲突:使用(加密类型='RANDOMIZED',加密算法名称='AEAD\U AES\U 256\U CBC\U HMAC\U SHA\U 256',列加密\U密钥\U名称='ColumnKey',列加密\U密钥\U数据库\U名称='ZP\U Test')加密的十进制(4,2)与使用加密的十进制(18,2)不兼容(加密类型='随机',加密算法名称='AEAD\U AES\U 256\U CBC\U HMAC\U SHA\U 256',列加密密钥名称='ColumnKey',列加密密钥数据库名称='ZP\U测试')
无法准备对账单

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

用于创建表的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();
SQL中的跟踪,当发生错误时-

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);