4

我确信这有一个非常简单的解决方案,但我已经用尽了我的资源。我需要在 MSSQL2k8 的列中插入一堆WideString可能包含的变量。在转换中的某处被视为字符串终止符......所以,当我存储时,仅存储。我正在使用. 我能做些什么呢?#0NVARCHAR(1024)#0#6'r'#0'abc'#6'r'TADOQuery


这是我使用的代码:

var
  S: string;
begin
  S := #6'r'#0'abc';
  ADOQuery1.Append;
  ADOQuery1S.Value := S;
  { At this point, S = #6'r'#0'abc' and ADOQuery1S.Value = #6'r';}
  ADOQuery1.Post;
end;
4

2 回答 2

5

如果要存储以任何可能包含 NULL 的方式加密的字符串,请使用 Soap.EncdDecd.pas(旧版本中的 EncdDecd.pas)中的例程将加密数据编码和解码为 Base64。

并且务必使用来自 Microsoft CryptoAPI 或任何本机 Delphi 实现(例如DCPCrypt )的适当加密。

如果您要存储用于访问系统的密码,请考虑对它们进行散列(和加盐)。显然,如果它们是连接到其他系统的密码,你就不能这样做。

var
  B64: string;
begin
  B64 := EncodeString(#6'r'#0'abc');
  ADOQuery1.Append;
  ADOQuery1S.Value := B64;
  ADOQuery1.Post;
end;
于 2012-10-23T11:06:37.110 回答
2

如果您可以更改架构,请改用 VARBINARY 或 IMAGE。这些字段类型旨在保存二进制数据。

create table MY_DATA ( FLD_1 varbinary(2048), FLD_2 image )
于 2012-10-24T10:24:41.253 回答