• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            山寨:不是最好的,是最適合我們的!歡迎體驗(yàn)山寨 中文版MSDN

            Blog @ Blog

            當(dāng)華美的葉片落盡,生命的脈絡(luò)才歷歷可見(jiàn)。 -- 聶魯達(dá)

            常用鏈接

            統(tǒng)計(jì)

            積分與排名

            BBS

            Blog

            Web

            最新評(píng)論

            關(guān)于用VC進(jìn)行圖像數(shù)據(jù)(二進(jìn)制大對(duì)象)存儲(chǔ)數(shù)據(jù)庫(kù)的一點(diǎn)心得

            下面給出用VC,VB如何操作圖像文件存取數(shù)據(jù)庫(kù)的原碼,幫助一些還沒(méi)有掌握方法的朋友,也請(qǐng)這方面的高手多多指教。(均用ADO連接數(shù)據(jù)庫(kù))

            1. VC把一個(gè)文件存入數(shù)據(jù)庫(kù)

            CFile imagefile;
              
            if(0 == imagefile.Open("d:\\user\\bmp.bmp",CFile::modeRead))
                 
            return;
              _RecordsetPtr pRs 
            = NULL;             
              _ConnectionPtr pConnection 
            = NULL;
              _variant_t varChunk;
              HRESULT hr;
              BYTE
            * pbuf;
              
            long nLength = imagefile.GetLength();
              pbuf 
            = new BYTE[nLength+2];
              
            if(pbuf == NULL)
                 
            return;                             //allocate memory error;
              imagefile.Read(pbuf,nLength);          //read the file into memory

              BYTE 
            *pBufEx;
              pBufEx 
            = pbuf;
              
            //build a SAFFERRAY
              SAFEARRAY* psa;
              SAFEARRAYBOUND rgsabound[
            1];
              rgsabound[
            0].lLbound = 0;
              rgsabound[
            0].cElements = nLength;
              psa 
            = SafeArrayCreate(VT_UI1, 1, rgsabound);

              
            for (long i = 0; i < nLength; i++)
                   SafeArrayPutElement (psa, 
            &i, pBufEx++);
              VARIANT varBLOB;
              varBLOB.vt 
            = VT_ARRAY | VT_UI1;
              varBLOB.parray 
            = psa;

              _bstr_t strCnn(
            "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=CUSTOM;Data Source=SERVER");    
                
            try
                
            {
                    
            //Open a connection
                    pConnection.CreateInstance(__uuidof(Connection));
                    hr 
            = pConnection->Open(strCnn,"","",NULL);   //Connect a DataBase
                    pRs.CreateInstance(__uuidof(Recordset));
                    pRs
            ->Open("CustomInfo",_variant_t((IDispatch *) pConnection,true),adOpenKeyset,adLockOptimistic,adCmdTable);  //Open a Table
             
            //      pRs->AddNew();        
                    pRs->Fields->GetItem("Image")->AppendChunk(varBLOB);        
                    pRs
            ->Update();
                    pRs
            ->Close();
                    pConnection
            ->Close();
             }

                
            catch(_com_error &e)
                
            {
                    
            // Notify the user of errors if any.

                    _bstr_t bstrSource(e.Source());
                    _bstr_t bstrDescription(e.Description());
                    CString sError;
                    sError.Format(
            "Source : %s \n Description : %s\n",(LPCSTR)bstrSource,(LPCSTR)bstrDescription);
                    AfxMessageBox(sError);     
             }


             2. VC把數(shù)據(jù)庫(kù)中IMAGE字段取出存為文件
                _RecordsetPtr pRs = NULL;
                _ConnectionPtr pConnection 
            = NULL;
                _variant_t varChunk;
                HRESULT hr;
                VARIANT varBLOB;
                _bstr_t strCnn(
            "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=CUSTOM;Data Source=SERVER");    
                
            try
                
            {
                    
            //Open a connection
                    pConnection.CreateInstance(__uuidof(Connection));
                    hr 
            = pConnection->Open(strCnn,"","",NULL);        
                    pRs.CreateInstance(__uuidof(Recordset));
                    pRs
            ->Open("CustomInfo",_variant_t((IDispatch *) pConnection,true),adOpenKeyset,adLockOptimistic,adCmdTable);
                   
            //read  data  
                   long lDataLength = pRs->Fields->GetItem("Image")->ActualSize;
                   varBLOB 
            = pRs->GetFields()->GetItem("Image")->GetChunk(lDataLength);
                  
            if(varBLOB.vt == (VT_ARRAY | VT_UI1))        
                 
            {
                        BYTE 
            *pBuf = NULL;   
                        pBuf 
            = (BYTE*)GlobalAlloc(GMEM_FIXED,lDataLength);
                        SafeArrayAccessData(varBLOB.parray,(
            void **)pBuf); 
                        
            //Build a File in Windows Temp Directory
                        char tmpPath[_MAX_PATH+1];
                        GetTempPath(_MAX_PATH,tmpPath);
                        CString strFileName 
            = "temp.bmp";
                        strFileName 
            = tmpPath+strFileName;
                                                  
                        CFile outFile(strFileName,CFile::modeCreate
            |CFile::modeWrite);

                        LPSTR buffer 
            = (LPSTR)GlobalLock((HGLOBAL)pBuf);
                        outFile.WriteHuge(buffer,lDataLength);
                        GlobalUnlock((HGLOBAL)pBuf);
                        outFile.Close();           
                        SafeArrayUnaccessData (varBLOB.parray);
                   }


                    pRs
            ->Close();
                    pConnection
            ->Close();
                 }

                
            catch(_com_error &e)
                
            {
                    
            // Notify the user of errors if any.
                    _bstr_t bstrSource(e.Source());
                    _bstr_t bstrDescription(e.Description());
                    CString sError;
                    sError.Format(
            "Source : %s \n Description : %s\n",(LPCSTR)bstrSource,(LPCSTR)bstrDescription);
                    AfxMessageBox(sError);     
             }
             
            轉(zhuǎn)自:http://dev.rdxx.com/VC/VCDB/2001-10/6/024749171.shtml

            posted on 2008-06-13 09:21 isabc 閱讀(698) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 數(shù)據(jù)庫(kù)

            廣告信息(免費(fèi)廣告聯(lián)系)

            中文版MSDN:
            歡迎體驗(yàn)

            久久久久久久97| 热综合一本伊人久久精品| 99久久99久久精品国产片果冻| 国产无套内射久久久国产| 亚洲AV日韩AV永久无码久久| 91久久精品视频| 久久精品国产亚洲AV无码麻豆| 久久人人爽人人爽人人片AV东京热| 国产ww久久久久久久久久| 伊人热热久久原色播放www | 麻豆久久久9性大片| 久久久国产乱子伦精品作者| 亚洲欧美成人久久综合中文网| 久久亚洲欧美国产精品| 国産精品久久久久久久| 久久久久99精品成人片试看 | 国产成人久久AV免费| 久久人与动人物a级毛片| 婷婷久久精品国产| 国产精品亚洲美女久久久| 久久精品国产亚洲AV高清热| 99久久夜色精品国产网站| 亚洲精品无码久久毛片| 久久久久国产一级毛片高清板| 久久99国产亚洲高清观看首页| 久久99精品久久久久子伦| 人妻丰满AV无码久久不卡| 亚洲午夜久久久久久久久电影网 | 久久免费的精品国产V∧| 精品一二三区久久aaa片| 日韩中文久久| 人人狠狠综合久久亚洲| 日本久久久久久久久久| 久久人人超碰精品CAOPOREN| 亚洲精品视频久久久| 亚洲欧美国产日韩综合久久| 亚洲国产精品综合久久一线| 综合久久精品色| 无码精品久久久天天影视 | 亚洲午夜福利精品久久| 久久乐国产综合亚洲精品|