表中有个字段是byte类型,想把该字段和其他类型字段的数据导出到文本文件中,但是导出的都是乱码,而且还被截断了一部分。我查了下文档,按照文档上的格式该了多次,还是不对。之前有一次数据不是乱码,但仍然只导出了一部分。
下面是代码,请高手指教!!
bool CDBBackupApi::BackupEmstopo(const string& strEditPath)
{
EXEC SQL begin declare section;
int iemsid = 0;
int ilength = 0;
int icrc= 0;
loc_t cat_descr;//////////主变量声明
char arcCursor[20];
EXEC SQL end declare section;
CreateVar(NULL, arcCursor, NULL);
EXEC SQL declare :arcCursor cursor for
select emsid, length, crc
from emstopo order by emsid;
EXEC SQL open :arcCursor;
string strFileName = strEditPath + "\\emstopo.unl";
ofstream out_file( strFileName.c_str() );
//填充loc_t结构体信息
cat_descr.loc_loctype = LOCMEMORY;
cat_descr.loc_oflags = 0;
cat_descr.loc_mflags = 0;
cat_descr.loc_oflags = 0;
for ( ; ; )
{
EXEC SQL fetch :arcCursor into :iemsid, :ilength, :icrc;
if (strncmp( SQLSTATE, "00", 02) != 0 )
break;
cat_descr.loc_bufsize = -1;
cat_descr.loc_size = -1;
EXEC SQL select topo into :cat_descr from emstopo where emsid = :iemsid;
out_file<<iemsid<<"|";
string strtopo;
//写byte类型字段数据
if (cat_descr.loc_size != 0)
{
out_file.write(cat_descr.loc_buffer, cat_descr.loc_size);
}
out_file"|"<<ilength<<"|"<<icrc<<"|"<<endl;
delete[] pbyBuffer;
pbyBuffer = 0;
}
EXEC SQL close :arcCursor ;
FreeVar(NULL, arcCursor, NULL);
out_file.close();
return true;
}
------解决方案--------------------------------------------------------
好像没什么问题嘛。
把cat_descr.loc_size = -1; 这一行去掉看看。
另外可以在取之后打印一下loc_status看看。