C++使用otlv4在做插入时,有一些设计的坑需要注意
插入数据:
当要给表中插入单个字符时,数据库表设计使用varchar(1)是合理的,但是otlv4一直报错char。
后续查很久才知道,otlv4所写的绑定的字符数组的长度应该实际数组的长度相同(包含’/0’),即比数据库中定义的字符串的长度多一位,因为数据库中不存储末位的’\0’。
//行得通的SQL
otl_stream o(1, //buffer size should be == 1 always on INSERT.
"insert into tb3 values(:f1<char[32]>,:f2<char[64]>,:f3<float>)",
sql_server // connectobject
);
o << "临时测试" << "临时玩" << 111.1f;
*/
//要插入的表列类型是varchar(1),至少需要char[2]
otl_stream o(1, //buffer size should be == 1 always on INSERT.
"insert into mytb values(:f1<char[2]>)", sql_server // connectobject
);
o << 'b' ;
此外,sql server中用nchar[]、varchar[n]这种,在语句中一律用char[n]即可。
下面也记录了简单的查看数据方式:
查看数据:
void DataStore::test()
{
try
{
otl_stream o(1024,
"select * from tb3", sql_server);
char InstrumentID[32], InstrumentName[64];
double LastPrice;
while (!o.eof())
{
o >> InstrumentID >> InstrumentName >> LastPrice;
char buf[256] = { 0 };
sprintf(buf, "合约ID:%s, 合约名:%s, 价格:%.02f", InstrumentID, InstrumentName, LastPrice);
cout << buf << endl;
}
cout << "数据库test读取正常" << endl;
o.close();
}
catch (otl_exception& p)
{
cout << "DBtest出错"<<endl;
}
}