4

私は取得していSqlExceptionます:

オペランド型の衝突: varchar は、(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') で暗号化された varchar(50) と互換性がありません。クライアントからメタデータを受け取りました。バッチの呼び出し中にエラーが発生したため、クライアントは sp_describe_parameter_encryption を呼び出して再試行することにより、パラメーター暗号化メタデータを更新できます。

私のC#コード:

using (var connection = new SqlConnection(GetConnectionString()))
{
    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();
    }
}

そして私のストアドプロシージャ:

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;

暗号化されていないフィールドにデータを挿入しても問題ありません。

この記事を見つけました

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

私の問題は似ていますが、解決策が見つかりません。

4

3 に答える 3

-2

まだこの問題に直面していて、上記のチェックのどれも役に立たなかった人は、手順とコードの両方でパラメーター名が (大文字と小文字を区別して) 正確に一致していることを確認してください。

于 2020-08-31T17:11:52.967 に答える