我确信这有一个非常简单的解决方案,但我已经耗尽了我的资源。我需要在MSSQL2k8的WideString
列中插入一堆#0
个可能包含NVARCHAR(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;
答案 0 :(得分:5)
如果要存储通过任何可能包含NULL的方式加密的字符串,请使用Soap.EncdDecd.pas(旧版本中的EncdDecd.pas)中的例程将加密数据编码并解码为Base64。
DO USE 正确加密,可以是Microsoft CryptoAPI,也可以是DCPCrypt等任何本地Delphi实现。
如果要存储用于访问系统的密码,请考虑对它们进行散列(和腌制)。显然,如果它们是连接到其他系统的密码,则无法做到这一点。
var
B64: string;
begin
B64 := EncodeString(#6'r'#0'abc');
ADOQuery1.Append;
ADOQuery1S.Value := B64;
ADOQuery1.Post;
end;
答案 1 :(得分:2)
如果您可以更改架构,请改用VARBINARY或IMAGE。 这些字段类型旨在保存二进制数据。
create table MY_DATA ( FLD_1 varbinary(2048), FLD_2 image )