协议缓冲区序列化:无法将序列化重复字段插入SQL Server

时间:2015-05-22 12:16:12

标签: c++ sql-server serialization char protocol-buffers

我正在使用Google协议缓冲区进行序列化。这是.proto文件:

message Word
{
message Record
{
     optional uint64 id = 1; 
     optional string word = 2;
     optional double value = 3;
}
message RecordSeq
{
    repeated Record RecSeq = 1;
}
}

我使用SerializeAsString()将RecordSeq消息序列化为字符串。在我的代码中,在某个地方,我做了类似以下的事情:

Word::RecordSeq recseq;

for(int i=0;i<100;i++)
{
Word::Record *rec = recseq.add_recseq();
rec->set_id(4);
rec->set_word("program");
rec->set_value(1.0);
}

std::string result = recseq.SerializeAsString();

现在我想将此序列化消息插入SQL Server数据库。为此,我想要const char*。但是,当我通过result.c_str()转换为char *时,结果被截断。我打印出结果,发现里面有空白区域。

我的插入函数将结果及其长度作为参数。

Insert(result.c_str(), result.length());

我也尝试使用result.data()。它也截断了结果。有没有其他方法可以做到这一点?

我尝试反序列化邮件而不将其转换为const char*。它正确地反序列化它。

Word::RecordSeq recseq;
recseq.ParseFromString(result);

for(int j=0;j<recseq.recseq_size();j++)
{
const Word::Record& rec = recseq.recseq(j);
std::cout<<rec.word()<<std::endl;
std::cout<<rec.id()<<std::endl;
std::cout<<rec.value()<<std::endl;
}

感谢。

0 个答案:

没有答案