资源描述:
《利用odbcapi读取图像的例子》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、我这给你一个利用odbcapi读取图像的例子:通用 /*====================================== 从数据库中提取图像并存放在c:temp.jpg 本函数中只提取第一个图像 =======================================*/ void CInsertImageDlg::OnFetch() { CFile fp,fp1; fp.Open("c:\temp.jpg",CFile::modeCreate
2、CFile::modeReadWrite
3、C
4、File::typeBinary); fp1.Open("c:\temp1.jpg",CFile::modeCreate
5、CFile::modeReadWrite
6、CFile::typeBinary); SQLHENV henv = SQL_NULL_HENV; SQLHDBC hdbc= SQL_NULL_HDBC; SQLHSTMT hstmt = SQL_NULL_HSTMT; RETCODE retcode=NULL; char *pUser="s
7、a"; char *pwd="sa"; char *pDSN="hhhh"; ///////////////////////////////////////////// SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv); SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(SQLPOINTER) SQL_OV_ODBC3,SQL_IS_INTEGER); SQLAllocHandle(SQL_HANDLE_DBC, henv
8、, &hdbc); SQLConnect(hdbc,(unsigned char*)pDSN, SQL_NTS,(unsigned char*)pUser, SQL_NTS,(unsigned char*)pwd,SQL_NTS); SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); ////////////////////////////////////////////// char *sql="select * from photo"; SQLExecDire
9、ct(hstmt,(unsigned char*)sql,strlen(sql)); SQLFetch(hstmt);//提取第一个图像 ///////////////////////////////////////////// //开始从数据库中提取第一个图像的内容,并存放在c:temp.jpg文件中 BYTE Buf[1]; BYTE pImage[1024]; long nNum=0,cbNum=0; memset(Buf,0,1); memset(pImage,
10、0,1024); if(SQL_SUCCESS_WITH_INFO==SQLGetData(hstmt,1,SQL_C_BINARY,Buf,1,&nNum)) {//得到图像的大小,保存在nNum中 fp.Write(Buf,1); nNum-=1; //根据图像大小,每次提取1024字节个内容存入c:temp.jpg文件。 while(retcode!=SQL_NO_DATA) { memset(pImage,0,1024); retcode=SQLGetData(hstmt,1,SQ
11、L_C_BINARY,pImage,1024,&cbNum); if (retcode!=SQL_NO_DATA ) { if(nNum>1024) fp.Write(pImage,1024); else fp.Write(pImage,nNum); nNum-=1024; } } MessageBox("提取图像成功,保存在c:\temp.jpg!"); } memset(Buf,0,1); memset(pImage,0,1024); if(SQL_SUCCES
12、S_WITH_INFO==SQLGetData(hstmt,2,SQL_C_BINARY,Buf,1,&nNum)) {//得到图像的大小,保