2017-08-18 2 views
1

新しいSQL Server 2016機能を使用しています - 常に暗号化されています。それは非常にクールでシンプルな技術ですが、小数点タイプではありません。私は値を挿入すると常に暗号化を10進数(18,2)で使用する

、私はこの1つ(ZP_Test - 私のDB名)のようなエラーを取得しています:

オペランドタイプ衝突:(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' で暗号化された小数(18,2)と互換性がない、column_encryption_key_name = 'ColomnKey'、column_encryption_key_database_name = 'ZP_Test')
ステートメントを準備できませんでした。

私の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)' 

答えて

0

小数の精度とスケールを指定してください次のようにSqlParamaterオブジェクトを使用します。

SqlParameter param = new SqlParameter("@amount", SqlDbType.Decimal); 
param.Precision = 18; 
param.Scale = 2; 
command.Parameters.Add(param); 
関連する問題