Conflit de type opérande: varchar est incompatible avec varchar (50) essayant d'insert dans une database chiffrée

SqlException une SqlException :

Conflit de type opérande: varchar est incompatible avec varchar (50) chiffré avec (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', column_encryption_key_database_name = 'PB') collation_name = 'SQL_Latin1_General_CP1_CI_AS' \ r \ nCryptage incorrect des parameters les métadonnées ont été reçues du client. L'erreur s'est produite lors de l'appel du lot et, par conséquent, le client peut actualiser les métadonnées de chiffrement des parameters en appelant sp_describe_parameter_encryption et réessayez.

Mon code C #:

 using (var connection = new SqlConnection(GetConnectionSsortingng())) { using (var cmd = new SqlCommand("Clients_Insert", connection)) { cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@Email", SqlDbType.VarChar, 50).Value = client.Email; cmd.Parameters.Add("@ContactPerson", SqlDbType.VarChar, 400).Value = client.ContactPerson; connection.Open(); cmd.ExecuteNonQuery(); } } 

Et ma procédure stockée:

 ALTER PROCEDURE [dbo].[Clients_Insert] @Email VARCHAR(50), @ContactPerson VARCHAR(400) AS BEGIN INSERT into dbo.Clients(Email, ContactPerson) VALUES (@Email, @ContactPerson); SELECT SCOPE_IDENTITY(); END; 

Je n'ai aucun problème avec l'insertion de données dans des champs non cryptés.

J'ai trouvé cet article

http://dataap.org/sql-2016-ctp/column-level-encryption-using-always-encrypted-in-sql-server-2016/

Mon problème est similaire mais je n'ai pas trouvé la solution.

Il y a 2 choses que vous pouvez essayer,

Assurez-vous que le paramètre de chiffrement de colonne est activé dans votre string de connection. Cela peut être effectué à l'aide d'un object SqlConnectionSsortingngBuilder et en définissant SqlConnectionSsortingngBuilder.ColumnEncryptionSetting sur Enabled comme suit

 strbldr.ColumnEncryptionSetting = SqlConnectionColumnEncryptionSetting.Enabled; 

Si votre procédure stockée a été créée avant le encryption de votre colonne, vous devez actualiser les métadonnées de votre procédure stockée comme suit

 Use [Database] GO --Do this for all stored procedures EXEC sys.sp_refresh_parameter_encryption @name = '[dbo].[Clients_Insert]'