问题:
现在有一批的cad文件,想插入sql server2k数据库中,数据库中的字段数据类型是
image,用什么语句可以实现插入和查询呢?
btw:是不是用sql server2k的查询分析器不能实现图片的插入和查询呢?
3x!

解决方案 »

  1.   

    如果是oracle的话,可以考虑用BLOB
      

  2.   

    1。Using CLongBinary for BLOBs 
    2。Following code snippet shows how to do this in the actual code:
    3。uses an Access database to store the images
    // Store the Image to database table
    // 
    try
    {
        dbImages.Open();
        dbImages.AddNew();    CFile fileImage;
        CFileStatus fileStatus;    fileImage.Open("c:\\winnt\\winnt256.bmp", CFile::modeRead);
        fileImage.GetStatus(fileStatus);    dbImages.m_BLOBName = fileImage.GetFileTitle();
        dbImages.m_BLOBImage.m_dwDataLength = fileStatus.m_size;    HGLOBAL hGlobal = GlobalAlloc(GPTR,fileStatus.m_size);
        dbImages.m_BLOBImage.m_hData = GlobalLock(hGlobal);    fileImage.ReadHuge(dbImages.m_BLOBImage.m_hData,fileStatus.m_size);    dbImages.SetFieldDirty(&dbImages.m_BLOBImage);
        dbImages.SetFieldNull(&dbImages.m_BLOBImage,FALSE);
        dbImages.Update();    GlobalUnlock(hGlobal);    dbImages.Close();    pList->InsertItem(0,fileImage.GetFileTitle());
    }
    catch(CException* pE)
    {
        pE->ReportError();
        pE->Delete();
        return;
    }
     // To restore image from db table
    CdbImages   dbImages(&theApp.m_DB);
    CString     strFileName = pList->GetItemText(nIndex,0);
    dbImages.m_strFilter.Format("BLOBName = '%s'",strFileName);
    try
    {
        dbImages.Open();
        if  (dbImages.IsEOF())
            AfxMessageBox("Unable to get image from db");
        else
        {
            char    tmpPath[_MAX_PATH+1];
            GetTempPath(_MAX_PATH,tmpPath);        strFileName.Insert(0,tmpPath);
            
            CFile outFile(strFileName,CFile::modeCreate|CFile::modeWrite);
            LPSTR buffer = (LPSTR)GlobalLock(dbImages.m_BLOBImage.m_hData);
            outFile.WriteHuge(buffer,dbImages.m_BLOBImage.m_dwDataLength);
            GlobalUnlock(dbImages.m_BLOBImage.m_hData);
            outFile.Close();        theApp.OpenDocumentFile(strFileName);
        }    dbImages.Close();}
    catch(CException* pE)
    {
        pE->ReportError();
        pE->Delete();
        return;
    }
      

  3.   

    用ODBC
    重载crecordset 
    重写DoFieldExchange( CFieldExchange* pFX )
    RFX_Binary( pFX, youfieldname, m_pbyte, 300000);//CByteArray *m_pbyte 长度你自己可以定长一些或短一些或动态。m_pbyte //为你的图片数据。
    使用时:yourecordset.addnew();
    yourecordset.m_pbyte = pbmp ; 
    yourecordset.update();