Bootstrap

C++otlv4连接sql serveer使用记录(注意点)

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;
	}
}
;