当客户输入出生日期时,我将'01 / 01/2000'(作为字符串)发送到我的SProc。在将其存储在表中之前,我必须对该字段进行加密(所有其他加密字段都能正常工作)。
表中的字段定义是:DOB varbinary(max)。 当我查看表中的日期时,它显示为'Jan 01 200'(来自SProc的输入字段为nVarchar(10))。
如果我在我的网络应用程序中更新DOB,将其从'Jan 01 200'更改为'01 / 01/2000' - 更新SProc似乎将DOB字段保存为'01 / 01/2000'。< / p>
我已经检查/重新检查了插入&amp;更新SProcs&amp;看看插入显示'Jan 01 200'没有区别/原因,但是Update从那时开始显示'01 / 01/2000'。有什么想法吗?
尽量使这个变得尽可能简单,以下是SProc的一部分:
ALTER PROCEDURE [dbo].[insKids](
@aDOB nvarchar(10))
AS
OPEN SYMMETRIC KEY EncryptKey DECRYPTION BY CERTIFICATE EncryptCert
declare @aDOB_ varbinary(MAX)
if LEN(@aDOB) > 0 set @aDOB_ = ENCRYPTBYKEY(KEY_GUID('EncryptKey'),@aDOB)
INSERT INTO [Table1] ([aDOB]) VALUES (@aDOB_)
传入值'01 / 01/2000'。
以下是Select SProc的示例:
OPEN SYMMETRIC KEY EncryptKey DECRYPTION BY CERTIFICATE EncryptCert
SELECT CONVERT(nvarchar,DECRYPTBYKEY(aDOB)) as aDOB FROM Table1 WHERE (fk = @fk)
同样,我对许多没有问题的字段使用加密/解密 - 只是这个日期字段。