Sql server 无法将varchar empty/null值插入或更新到始终加密的列中

Sql server 无法将varchar empty/null值插入或更新到始终加密的列中,sql-server,always-encrypted,Sql Server,Always Encrypted,我正在尝试使用sql客户端将C中的空”或null值更新到始终加密的列中;然而,我得到下面的错误。如果我传递一个空格“,它就会工作 错误: 使用(加密类型='DETERMINISTIC',加密算法\名称='AEAD\ U AES\ U 256\ CBC\ U HMAC\ U SHA\ U 256',列加密\密钥\名称='CEK',列加密\密钥\数据库\名称='db')加密的nvarchar(4000)与使用加密的nvarchar(50)不兼容(加密类型='DETERMINISTIC',加密算法名称

我正在尝试使用sql客户端将C中的空
null
值更新到始终加密的列中;然而,我得到下面的错误。如果我传递一个空格
,它就会工作

错误:

使用(加密类型='DETERMINISTIC',加密算法\名称='AEAD\ U AES\ U 256\ CBC\ U HMAC\ U SHA\ U 256',列加密\密钥\名称='CEK',列加密\密钥\数据库\名称='db')加密的nvarchar(4000)与使用加密的nvarchar(50)不兼容(加密类型='DETERMINISTIC',加密算法名称='AEAD\U AES\U 256\U CBC\U HMAC\U SHA\U 256',列加密密钥名称='CEK',列加密密钥数据库名称='db')

工作代码如下:

        SqlConnection connection = new SqlConnection(dbString);
        connection.Open();
        SqlParameter p = new SqlParameter("@lastname", System.Data.SqlDbType.NVarChar, 50);
        p.Value = string.Empty;

        SqlCommand command = new SqlCommand("update associate set lastname=@lastname", connection);
        command.Parameters.Add(p);
        command.ExecuteNonQuery();
        connection.Close();

问题是客户端参数定义必须与服务器上的加密列类型完全匹配。

请发布代码/查询和表架构。错误反映的是参数/字段大小,而不是null或空字符串。其中一个长度为50,另一个长度为4000。您是如何更新表的?是否使用了参数非结构化查询或存储过程?参数的大小是多少?列架构是nVarchar(50)如果我传递任何有效的值,就会出现空值和空值的问题,4000大小我在表或过程中都没有使用过,不知道从何处使用4000大小。如果不使用大小,将假定为默认大小。发布代码。谢谢,您的回复帮助了,创建参数对象时需要大小,这在我的代码中丢失了。工作正在检查下面的示例代码。SqlConnection connection=new-SqlConnection(dbString);connection.Open();SqlParameter p=new-SqlParameter(@lastname),System.Data.SqlDbType.NVarChar,50);p.Value=string.Empty;SqlCommand=new-SqlCommand(“更新关联集lastname=@lastname”,connection);command.Parameters.Add(p);command.ExecuteNonQuery();connection.Close();如果您已经解决了问题(我是这样读您上次的评论的?),请输入解决方案作为答案并接受它。这将从未回答列表中删除该问题。