我用的mysqlodbc,代码如下,其中di.m_img和di.m_texture是二进制数据,不知道对你有没有帮助。
// 存入数据库
CString sqlstr = _T("where false");
Cdaimgdetail di;
di.Open2(sqlstr);
di.AddNew(); CString diid = _T("DI_") + getguid();
di.m_ID = diid;
di.m_SDID = sdid;
di.m_scantime = m_timg.scanday;
di.m_scanpos.Format( L"%d", m_timg.pos ); di.m_img.SetSize( encodelen );
LPBYTE p = di.m_img.GetData(); // 取目的指针
memcpy( p, buffer, encodelen );
di.SetFieldDirty( &di.m_img );
di.SetFieldNull( &di.m_img, FALSE );
delete buffer; // 建立头
BYTE * head = new BYTE[0x10000]; //?? 申请一个较大的空间。
m_timg.inithead( head );
// 用实际高度
((imginfo *)head)->imgh = imgheight; int n = ((imginfo *)head)->size;
di.m_texture.SetSize( n );
memcpy( di.m_texture.GetData(), head, n);
delete head;
head = 0;
di.SetFieldDirty( &di.m_texture );
di.SetFieldNull( &di.m_texture, FALSE ); di.Update();
di.Close();
// 存入数据库
CString sqlstr = _T("where false");
Cdaimgdetail di;
di.Open2(sqlstr);
di.AddNew(); CString diid = _T("DI_") + getguid();
di.m_ID = diid;
di.m_SDID = sdid;
di.m_scantime = m_timg.scanday;
di.m_scanpos.Format( L"%d", m_timg.pos ); di.m_img.SetSize( encodelen );
LPBYTE p = di.m_img.GetData(); // 取目的指针
memcpy( p, buffer, encodelen );
di.SetFieldDirty( &di.m_img );
di.SetFieldNull( &di.m_img, FALSE );
delete buffer; // 建立头
BYTE * head = new BYTE[0x10000]; //?? 申请一个较大的空间。
m_timg.inithead( head );
// 用实际高度
((imginfo *)head)->imgh = imgheight; int n = ((imginfo *)head)->size;
di.m_texture.SetSize( n );
memcpy( di.m_texture.GetData(), head, n);
delete head;
head = 0;
di.SetFieldDirty( &di.m_texture );
di.SetFieldNull( &di.m_texture, FALSE ); di.Update();
di.Close();
解决方案 »
- 对话框关联View类后,如何响应其中的按钮处理函数?
- fatal error C1010: unexpected end of file while looking for precompiled header d
- 如何固定窗口的大小?
- 请教:关于如果获得数据库记录集的个数问题?急急急急
- 如何在摄像头采集的实时视频上叠加文字?
- 使用CHtmlView这个显示网页时,为什么占用那么大的内存啊。
- 如何实现在不同时刻让按钮(button)显示不同的图象(bitmap)
- 这个fstream应放在什么地方才能使工程里的每个函数都能输出变量到文件?
- 验证一个类的静态数组成员^^^
- 如何 用扩展Zbuffer结构表示一个 圆柱体
- MFC SDI 程序 加载工具栏按钮错乱!!!!!!!!!
- 速进::有关 树视控件 查找节点、指向路径问题!请高人指点!不胜感激!
但是更新myodbc 驱动到myodbc 5.02.06后,不进行显式的adUseClient类型设置也能进行Blob类型操作,此种情况尚不太清楚什么原理;
符上操作代码:
BOOL CAdoDBMgr::InitDBConnect(LPCTSTR lpIP,
LPCTSTR lpDBName/* = _T("")*/,
LPCTSTR lpUsrID/* = _T("")*/,
LPCTSTR lpPWD/* = _T("")*/)
{
BOOL bResult = TRUE;
try
{
m_pConnection.CreateInstance(__uuidof(Connection));///创建Connection对象//"ADODB.Connection"
if (!m_pConnection)
{
bResult = FALSE;
m_nErrNum = GetLastError();
m_strErrInfo = _T("创建数据库连接对象失败!\n ");
return FALSE;
} CString strSQL;
// 使用5.1驱动
strSQL.Format(_T("DRIVER={MySQL ODBC 5.1 Driver};")
_T("SERVER=%s;DATABASE=%s;USER=%s;")
_T("PASSWORD=%s;OPTION=3;")
, lpIP, lpDBName, lpUsrID, lpPWD);
// // 使用5.2.6驱动(Unicode & ANSI )
// strSQL.Format(_T("DRIVER={MySQL ODBC 5.2 Unicode Driver};")
// _T("SERVER=%s;DATABASE=%s;USER=%s;")
// _T("PASSWORD=%s;OPTION=3;")
// , lpIP, lpDBName, lpUsrID, lpPWD);
// strSQL.Format(_T("DRIVER={MySQL ODBC 5.2 ANSI Driver};")
// _T("SERVER=%s;DATABASE=%s;USER=%s;")
// _T("PASSWORD=%s;OPTION=3;")
// , lpIP, lpDBName, lpUsrID, lpPWD); m_pConnection->Open(_bstr_t(strSQL),"","",adModeUnknown);///连接数据库
// 加此一句
// 对mysql来说,如果不用此cursor adUseClient,会导致在更新blob时不成功
// 但也不报错 确实是 adUseServer
//int aaa = m_pConnection->GetCursorLocation();
m_pConnection->PutCursorLocation(adUseClient);
//aaa = m_pConnection->GetCursorLocation(); bResult = TRUE;
}// try
catch(_com_error e)
{
bResult = FALSE;
m_nErrNum = GetLastError();
m_strErrNum = e.ErrorMessage();
m_strErrInfo = (LPCTSTR)(BSTR)e.Description();
} return bResult;
}