Я пытаюсь сохранить зашифрованные данные в своей базе данных (запущенной MS SQL 2005 Express) с помощью хранимой процедуры.
Хранимая процедура имеет следующую подпись:
ALTER PROCEDURE [dbo].[SaveData]
@FileName AS NVARCHAR(255),
@Data As VARBINARY(MAX),
@Key AS VARBINARY(MAX) = NULL,
@Final AS BIT = NULL
AS
....
В моем коде у меня есть две переменные типа byte[]
с моими данными:
public byte[] EncryptedData { get; set; }
public byte[] EncryptedPassword { get; set; }
var cmd = new SqlCommand("SaveData", conn);
cmd.CommandTimeout = 0;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@FileName", FileName);
cmd.Parameters.Add(new SqlParameter("@Data", SqlDbType.VarBinary, EncryptedData.Length, ParameterDirection.Input, false, 0, 0, "", DataRowVersion.Current, (SqlBinary) EncryptedData));
cmd.Parameters.Add(new SqlParameter("@Key", SqlDbType.VarBinary, EncryptedPassword.Length, ParameterDirection.Input, false, 0, 0, "", DataRowVersion.Current, (SqlBinary)EncryptedPassword));
cmd.Parameters.AddWithValue("@Final", true);
Всякий раз, когда я пытаюсь позвонить ExecuteNonQuery()
, я получаю следующее сообщение об ошибке (извините за немецкий, я просто хотел предоставить оригинальный текст, я также предоставляю перевод ниже!):
Синтаксис Фальше в Nähe von '¿'.
Bezeichner (beginnend mit '* è
¯äÅõ42 ‹áºªž (± Z¦ññú> ¬ÕÕ] ¥ Qî) ÀÍE5 Fäø + ïµ1˜Z}» [- A [Åñ # šužÿÄ} µ}
% АВД> TÛ¨¡ªƒ · г · SWFW
Вот английский перевод сообщения об ошибке (сделано мной, поэтому оно может и будет отличаться от канонического исходного сообщения об ошибке):
Синтаксическая ошибка рядом с '¿'.
Идентификатор (начинается с '* è
¯äÅõ42 ‹áºªž (± Z¦ññú> ¬ÕÕ] ¥ Qî) ÀÍE5 Fäø + ïµ1˜Z}» [- A [Åñ # šužÿÄ} µ}
% АВД> TÛ¨¡ªƒ · г · SWFW
Кажется, что строка SQL анализируется неправильно и некоторые двоичные данные анализируются как имя идентификатора.
Я пробовал много разных подходов, используя .AddWithValue()
и устанавливая свойства параметров один за другим - это не помогает.
Есть предложения?