csdn_文档中心_在vc中用ole db读写sql server中的blob字段.htm

来自「csdn10年中间经典帖子」· HTM 代码 · 共 1,040 行 · 第 1/5 页

HTM
1,040
字号
            lang=EN-US>OLE DB</SPAN><SPAN 
            style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">读写</SPAN><SPAN 
            lang=EN-US>SQL Server</SPAN><SPAN 
            style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的</SPAN><SPAN 
            lang=EN-US>BLOB</SPAN><SPAN 
            style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">字段时,尝试了几乎所有的绑定方法,读是没有问题,但总无法成功地将数据写入</SPAN><SPAN 
            lang=EN-US>BLOB</SPAN><SPAN 
            style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的字段中。后来在</SPAN><SPAN 
            lang=EN-US>SQL Server</SPAN><SPAN 
            style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</SPAN><SPAN 
            lang=EN-US>Books OnLines</SPAN><SPAN 
            style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中找到一些提示,经多次实验,终于成功地解决问题。在这里提供源代码供大家参考。</SPAN> 

            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">首先,应当从</SPAN><SPAN 
            lang=EN-US>ISequentialStream</SPAN><SPAN 
            style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">派生一个类,其头文件如下(</SPAN><SPAN 
            lang=EN-US>SeqStream.h</SPAN><SPAN 
            style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">):</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>//SeqStream.h</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US>#if 
            !defined (CSEQSTREAM_H)</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>#define CSEQSTREAM_H</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>&nbsp;<?xml:namespace prefix = o ns = 
            "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US>class 
            CSeqStream : public ISequentialStream</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>{</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>public:</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
            </SPAN>//Constructors</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
            </SPAN>CSeqStream();</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>virtual 
            ~CSeqStream();</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>&nbsp;<o:p></o:p></SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>virtual BOOL 
            Seek(ULONG iPos);</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>virtual BOOL 
            Clear();</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>virtual BOOL 
            CompareData(void* pBuffer);</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>virtual ULONG 
            Length()<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>{ return 
            m_cBufSize; };</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>virtual operator 
            void* const() { return m_pBuffer; };</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>&nbsp;<o:p></o:p></SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
            </SPAN>STDMETHODIMP_(ULONG)<SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
            </SPAN>AddRef(void);</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
            </SPAN>STDMETHODIMP_(ULONG)<SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
            </SPAN>Release(void);</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>STDMETHODIMP 
            QueryInterface(REFIID riid, LPVOID *ppv);</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>STDMETHODIMP 
            Read( </SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>/* [out] */ void __RPC_FAR *pv,</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>/* [in]<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>*/ ULONG 
            cb,</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>/* [out] */ ULONG __RPC_FAR *pcbRead);</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>STDMETHODIMP 
            Write( </SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>/* [in] */ const void __RPC_FAR *pv,</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>/* [in] */ ULONG cb,</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>/* [out]*/ ULONG __RPC_FAR *pcbWritten);</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>void ResetPosition();</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>protected:</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>&nbsp;<o:p></o:p></SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
</SPAN>//Data</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>private:</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>ULONG<SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>m_cRef;<SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>// reference count</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>void*<SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>m_pBuffer;<SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// 
            buffer</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>ULONG<SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>m_cBufSize;<SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// buffer 
            size</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>ULONG<SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>m_iPos;<SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>// current index position in the buffer</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>&nbsp;<o:p></o:p></SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>};</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>&nbsp;<o:p></o:p></SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>#endif</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>&nbsp;<o:p></o:p></SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">实现文件如下(</SPAN><SPAN 
            lang=EN-US>SeqStream.cpp</SPAN><SPAN 
            style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">):</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>#include "stdafx.h"</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>#include "SeqStream.h "</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>&nbsp;<o:p></o:p></SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>CSeqStream::CSeqStream()</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>{</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>m_iPos<SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>= 0;</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>m_cRef<SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>= 0;</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>m_pBuffer<SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>= 
            NULL;</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>m_cBufSize<SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>= 
            0;</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>//The 
            constructor AddRef's</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
            </SPAN>AddRef();</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>}</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>&nbsp;<o:p></o:p></SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>CSeqStream::~CSeqStream()</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>{</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>//Shouldn't have 
            any references left</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>//<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
            </SPAN>ASSERT(m_cRef == 0);</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
            </SPAN>CoTaskMemFree(m_pBuffer);</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>}</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>&nbsp;<o:p></o:p></SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 
            lang=EN-US>ULONG<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
            </SPAN>CSeqStream::AddRef(void)</SPAN></P>
            <P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?