Когда клиент вводит дату рождения, я отправляю '01/01/2000' (в виде строки) на мой SProc. Я должен зашифровать это поле (все остальные зашифрованные поля работают нормально), прежде чем сохранить его в таблице.
Определение поля в таблице: DOB varbinary (max).
Когда я смотрю на дату в таблице, она отображается как 'Jan 01 200' (поле ввода от SProc - как nVarchar (10)).
Если я обновляю DOB из своего веб-приложения, меняя его с «01.01.2002» на «01/01/2000» - обновление SProc сохраняет поле DOB как «01 / 01/2000». 1005 *
Я проверил / перепроверил оба элемента: «Вставка» и «Обновление» и не вижу различий / причин, по которым вставка показывает «01 января 200», а с тех пор обновление показывает «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)
Опять же, я использую шифрование / дешифрование для многих полей без проблем - только это поле даты.