加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – TSQLQuery.FieldByName().AsString – > TString

发布时间:2020-12-15 09:18:09 所属栏目:大数据 来源:网络整理
导读:我正在使用Delphi XE2.我的代码从SQL-Server 2008 R2数据库中提取数据.返回的数据是nvarchar(max)字段,包含1,055,227个字节的数据.我使用以下代码将字段数据保存到文件: procedure WriteFieldToFile(FieldName: string; Query: TSQLQuery);var ss: TStringS
我正在使用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;

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

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

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读