如何在MSSQL的NVARCHAR()列中插入包含#0的字符串?

iMa*_*ari 4 sql-server delphi ado sql-server-2008 delphi-xe2

我确信这有一个非常简单的解决方案,但我已经耗尽了我的资源.我需要插入一堆WideString可能包含在MSSQL2k8中#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;
Run Code Online (Sandbox Code Playgroud)

Ger*_*oll 5

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

并且DO使用适当的加密,可以是Microsoft CryptoAPI,也可以是任何本地Delphi实现,例如DCPCrypt.

如果要存储用于访问系统的密码,请考虑对它们进行散列(和腌制).显然,如果它们是连接到其他系统的密码,则无法做到这一点.

var
  B64: string;
begin
  B64 := EncodeString(#6'r'#0'abc');
  ADOQuery1.Append;
  ADOQuery1S.Value := B64;
  ADOQuery1.Post;
end;
Run Code Online (Sandbox Code Playgroud)

  • @iManBiglari,如果字符串是Base64编码或不是[`你只能猜测]](http://stackoverflow.com/q/6895009/960757). (3认同)