我在尝试将数据插入包含加密列的 SQL Server 表时遇到问题。
这是我的方法。
我创建了一个包含三列的表:[ID]、[名称]、[密码]。 [名称] 和 [密码] 列已加密。
with COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [Test_CEK], ENCRYPTION_TYPE = Deterministic, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256')
我已设置“列加密设置 = 已启用”
我设置了“始终加密的参数化”
我创建了一个将记录插入测试表的过程,如下所示:
USE [TestDB] GO
CREATE PROCEDURE InsertTest
@name varchar(50),
@pwd varchar(max)
AS
BEGIN
INSERT INTO [dbo].[Test] ([Name], [Password])
VALUES (@name, @pwd)
END
当我尝试使用此过程插入新行时:
[ EXEC InsertTest 'Test','Test' ]
我收到此错误:
消息 206,级别 16,状态 2,过程 InsertTest,第 0 行 [批量开始行 0]
操作数类型冲突:varchar 与使用 (encryption_type = 'DETERMINISTIC', Encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'Test_CEK', column_encryption_key_database_name = 'TestDB') 加密的 varchar(1) 不兼容 collation_name = 'SQL_Latin1_General_CP1_CI_AS'
我想通过存储过程向SQL表中插入数据。我不想使用 ADO.NET 进行 SQL 连接。
我想使用实体框架实现相同的功能。
这就是我尝试从 C# 调用过程的方式,但没有成功。
您需要使用参数而不是文字。你可以试试吗
DECLARE @name2 varchar(50) = 'Test'
DECLARE @pwd2 varchar(max) = 'Test'
EXEC InsertTest @name = @name2, @pwd = @pwd2