问题描述
解决方案
我把m_useBLOB.Open(CRecordset::dynaset, strSQL); 改成m_useBLOB.Open(CRecordset::snapshot, strSQL);就好了
CRecordset::dynaset与CRecordset::snapshot具体有什么区别还不清楚,问题暂时排出了
解决方案二:
设计了两个按钮,SAVE按钮表示向数据库存储二进制文件,read表示从数据库中把数据读出来,点击READ是会弹出ODBC 驱动程序不支持动态记录集
如果先点击Read按钮会弹出数据被截断;test1.doc里面依然没有数据写入。
void CTBLOBDlg::OnBtnRead()
{
// TODO: Add your control notification handler code here
try
{
CString strSQL = "select * from testBLOB where ID =16";//
m_useBLOB.Open(CRecordset::dynaset, strSQL);
if(m_useBLOB.IsEOF())
AfxMessageBox("Unable to get image from db");
else
{
char tmpPath[_MAX_PATH+1];
GetTempPath(_MAX_PATH,tmpPath);
CString strFileName = _T("C:\test1.doc");
CFile outFile(strFileName,CFile::modeCreate|CFile::modeWrite);
LPSTR buffer = (LPSTR)GlobalLock(m_useBLOB.m_BLOB.m_hData);
outFile.WriteHuge(buffer,m_useBLOB.m_BLOB.m_dwDataLength);
GlobalUnlock(m_useBLOB.m_BLOB.m_hData);
outFile.Close();
}
m_useBLOB.Close();
}
catch(CException* pE)
{
pE->ReportError();
pE->Delete();
return;
}
}
解决方案三:
odbc太老了,用ado试试。
时间: 2024-11-01 17:58:58