gpt4 book ai didi

delphi - TSQLQuery.FieldByName().AsString -> TStringStream 损坏数据

转载 作者:行者123 更新时间:2023-12-03 15:27:32 24 4
gpt4 key购买 nike

我正在使用Delphi XE2。我的代码从 SQL-Server 2008 R2 数据库中提取数据。返回的数据是一个包含 1,055,227 字节数据的 nvarchar(max) 字段。我使用以下代码将字段数据保存到文件中:

procedure WriteFieldToFile(FieldName: string; Query: TSQLQuery);
var
ss: TStringStream;
begin
ss := TStringStream.Create;
try
ss.WriteString(Query.FieldByName(FieldName).AsString);
ss.Position := 0;
ss.SaveToFile('C:\Test.txt');
finally
FreeAndNil(ss);
end;
end;

当我在十六进制查看器中检查文件时,前 524,287 字节(正好是 1/2 兆)看起来是正确的。剩余字节(524,288 到 1,055,227)均为空(#0),而不是原始数据。

这是将字符串字段从 TSQLQuery 保存到文件的正确方法吗?我选择使用 TStringStream 因为我最终会添加代码来对流上的数据执行其他操作,而这是 TFileStream 无法做到的。

最佳答案

TStringStream 在 XE2 中支持 TEncoding,但您没有在构造函数中指定任何编码,因此将使用 TEncoding.Default,这意味着您提供给它的任何字符串都将在内部转换为操作系统默认的 Ansi 编码。确保编码支持您尝试使用的 Unicode 字符,或者指定更合适的编码,例如 TEncoding.UTF8

还要确保 AsString 返回有效且正确的 UnicodeString 值。如果将垃圾作为输入,TStringStream 将无法正确保存数据。确保 FieldByName() 返回指向 TWideStringField 对象而不是 TStringField 对象的指针,以便正确处理数据库的 Unicode 数据。

关于delphi - TSQLQuery.FieldByName().AsString -> TStringStream 损坏数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12210174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com