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> <?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">
</SPAN>//Constructors</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes">
</SPAN>CSeqStream();</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes"> </SPAN>virtual
~CSeqStream();</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN
lang=EN-US> <o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes"> </SPAN>virtual BOOL
Seek(ULONG iPos);</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes"> </SPAN>virtual BOOL
Clear();</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes"> </SPAN>virtual BOOL
CompareData(void* pBuffer);</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes"> </SPAN>virtual ULONG
Length()<SPAN style="mso-spacerun: yes"> </SPAN>{ return
m_cBufSize; };</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes"> </SPAN>virtual operator
void* const() { return m_pBuffer; };</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN
lang=EN-US> <o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes">
</SPAN>STDMETHODIMP_(ULONG)<SPAN
style="mso-spacerun: yes">
</SPAN>AddRef(void);</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes">
</SPAN>STDMETHODIMP_(ULONG)<SPAN
style="mso-spacerun: yes">
</SPAN>Release(void);</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes"> </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"> </SPAN>STDMETHODIMP
Read( </SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes">
</SPAN>/* [out] */ void __RPC_FAR *pv,</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes">
</SPAN>/* [in]<SPAN style="mso-spacerun: yes"> </SPAN>*/ ULONG
cb,</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes">
</SPAN>/* [out] */ ULONG __RPC_FAR *pcbRead);</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes"> </SPAN>STDMETHODIMP
Write( </SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes">
</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">
</SPAN>/* [in] */ ULONG cb,</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes">
</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">
</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> <o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes">
</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"> </SPAN>ULONG<SPAN
style="mso-spacerun: yes">
</SPAN>m_cRef;<SPAN
style="mso-spacerun: yes">
</SPAN>// reference count</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes"> </SPAN>void*<SPAN
style="mso-spacerun: yes"> </SPAN><SPAN
style="mso-spacerun: yes"> </SPAN>m_pBuffer;<SPAN
style="mso-spacerun: yes"> </SPAN>//
buffer</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes"> </SPAN>ULONG<SPAN
style="mso-spacerun: yes">
</SPAN>m_cBufSize;<SPAN
style="mso-spacerun: yes"> </SPAN>// buffer
size</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes"> </SPAN>ULONG<SPAN
style="mso-spacerun: yes">
</SPAN>m_iPos;<SPAN
style="mso-spacerun: yes">
</SPAN>// current index position in the buffer</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN
lang=EN-US> <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> <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> <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> <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"> </SPAN>m_iPos<SPAN
style="mso-spacerun: yes">
</SPAN>= 0;</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes"> </SPAN>m_cRef<SPAN
style="mso-spacerun: yes">
</SPAN>= 0;</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes"> </SPAN>m_pBuffer<SPAN
style="mso-spacerun: yes"> </SPAN>=
NULL;</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes"> </SPAN>m_cBufSize<SPAN
style="mso-spacerun: yes"> </SPAN>=
0;</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes"> </SPAN>//The
constructor AddRef's</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes">
</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> <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"> </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">
</SPAN>ASSERT(m_cRef == 0);</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes">
</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> <o:p></o:p></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN
lang=EN-US>ULONG<SPAN style="mso-spacerun: yes">
</SPAN>CSeqStream::AddRef(void)</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?