我正在尝试获取存储在BLOB中的图像,然后将其另存为jpg。
在这里,我检索二进制数据并将其保存在str中;
string str;
SQLCHAR buf[500] = {0};
while ((SQL_SUCCEEDED(SQLGetData(StmtHandle, colnum, SQL_C_BINARY, buf, sizeof(buf), NULL))))
{
string data(reinterpret_cast< const char* >(buf), reinterpret_cast< const char* >(buf) + sizeof(buf));
str = str + data;
}
然后我将其写入文件
ofstream file;
file.open("C:\\Users\\tom\\Desktop\\img.jpeg");
file << str;
file.close();
我得到了不正确的图像。
这有什么错数据抽取(我用的这个方法这个)?
我不熟悉ODBC编程,但是乍看之下,我可以看到的一个问题是您假设数据长度是缓冲区大小的倍数。但是不能保证最后一次读取将返回准确的500字节的数据。
你应该写这样的东西。可能是:
string str;
SQLCHAR buf[500];
SQLLEN cbLeft; // #bytes remained
while ((SQL_SUCCEEDED(SQLGetData(StmtHandle,
colnum,
SQL_C_BINARY,
buf,
sizeof(buf),
&cbLeft))))
// ^^^^^^^
{
string data(reinterpret_cast< const char* >(buf),
reinterpret_cast< const char* >(buf)
+ cbLeft);
// ^^^^^^
str = str + data;
请花几分钟查看使用长度/指标值,以检查如何使用长度/指标值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句