Jam*_* L. 4 delphi stream sql-server-2008-r2 delphi-xe2
我正在使用Delphi XE2.我的代码从SQL-Server 2008 R2数据库中提取数据.返回的数据是一个nvarchar(max)包含1,055,227字节数据的字段.我使用以下代码将字段数据保存到文件:
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;
Run Code Online (Sandbox Code Playgroud)
当我在十六进制查看器中检查文件时,第一个524,287字节(正好是1/2兆字节)看起来是正确的.剩余的字节(524,288到1,055,227)都是空值(#0),而不是原始数据.
这是将字符串字段从a保存TSQLQuery到文件的正确方法吗?我选择使用TStringStream因为我最终会添加代码来对流上的数据做其他事情,这是我无法做到的TFileStream.
TStringStreamTEncoding在XE2中是-aware,但您没有在构造函数中指定任何编码,因此TEncoding.Default将使用,这意味着您提供给它的任何字符串将在内部转换为OS默认的Ansi编码.确保编码支持您尝试使用的Unicode字符,或者指定更合适的编码,例如TEncoding.UTF8.
还要确保AsString返回有效且正确的UnicodeString值以开始.TStringStream如果给出垃圾作为输入,则不会正确保存数据.确保FieldByName()返回指向TWideStringField对象而不是TStringField对象的指针,以便正确处理数据库的Unicode数据.
| 归档时间: |
|
| 查看次数: |
1456 次 |
| 最近记录: |