簡體   English   中英

操作數類型沖突:varchar 與嘗試插入加密數據庫的 varchar(50) 不兼容

[英]Operand type clash: varchar is incompatible with varchar(50) trying to insert in encrypted database

我收到一個SqlException

操作數類型沖突:varchar 與使用加密的 varchar(50) 不兼容 (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', column_encryption_key_name_1L_General encryption_property_key_database_1Latinr_Inc從客戶端收到元數據。 該錯誤發生在批處理調用期間,因此客戶端可以通過調用 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/

我的問題是類似的,但我還沒有找到解決方案。

有2件事你可以嘗試,

確保在您的連接字符串中啟用了列加密設置。 這可以使用SqlConnectionStringBuilder對象並將SqlConnectionStringBuilder.ColumnEncryptionSetting設置為Enabled ,如下所示

strbldr.ColumnEncryptionSetting = SqlConnectionColumnEncryptionSetting.Enabled;

如果您的存儲過程是在加密列之前創建的,則需要按如下方式刷新存儲過程的元數據

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

如果有人仍在為此尋找答案,那么對我DbType.AnsiStringFixedLength是您需要在 SqlParameter 數據類型中使用DbType.AnsiStringFixedLength數據類型,用於加密列。

請參閱這篇文章以獲取更多信息

任何仍然面臨這個問題並且上述檢查都沒有幫助的人,請確保過程和代碼中的參數名稱完全匹配(區分大小寫)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM