📄 csdn_文档中心_在vc中用ole db读写sql server中的blob字段.htm
字号:
</SPAN>return S_FALSE; </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>//Copy to users
buffer the number of bytes requested or remaining</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes"> </SPAN>memcpy(pv,
(void*)((BYTE*)m_pBuffer + m_iPos), cBytesRead);</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes"> </SPAN>m_iPos +=
cBytesRead;</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>if(pcbRead)</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes">
</SPAN>*pcbRead = cBytesRead;</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>if(cb !=
cBytesRead)</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes">
</SPAN>return S_FALSE; </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>return
S_OK;</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>HRESULT CSeqStream::Write(const void *pv, ULONG cb,
ULONG* pcbWritten)</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>//Parameter
checking</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes">
</SPAN>if(!pv)</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes">
</SPAN>return STG_E_INVALIDPOINTER;</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>if(pcbWritten)</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes">
</SPAN>*pcbWritten = 0;</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>if(cb ==
0)</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes">
</SPAN>return S_OK;</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>//Enlarge the
current buffer</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes"> </SPAN>m_cBufSize +=
cb;</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>//Need to append
to the end of the stream</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes"> </SPAN>m_pBuffer =
CoTaskMemRealloc(m_pBuffer, m_cBufSize);</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes">
</SPAN>memcpy((void*)((BYTE*)m_pBuffer + m_iPos), pv,
cb);</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes"> </SPAN>m_iPos +=
cb;</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>if(pcbWritten)</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes">
</SPAN>*pcbWritten = cb;</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>return
S_OK;</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>void
CSeqStream::ResetPosition()</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-tab-count: 1">
</SPAN>m_iPos=0;</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
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>Table</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">名为</SPAN><SPAN
lang=EN-US>tMaterials</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">,它的</SPAN><SPAN
lang=EN-US>Key</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为</SPAN><SPAN
lang=EN-US>MaterialID,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>Stream</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</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></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>BOOL
SetBLOBData(WCHAR *awcname,CString strFile)</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-tab-count: 1">
</SPAN>DBOBJECT ObjectStruct;</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes">
</SPAN>ObjectStruct.dwFlags = STGM_READ;</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes">
</SPAN>ObjectStruct.iid<SPAN
style="mso-spacerun: yes"> </SPAN>=
IID_ISequentialStream;</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>struct
BLOBDATA</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes"> </SPAN>{</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes">
</SPAN>DBSTATUS<SPAN
style="mso-spacerun: yes">
</SPAN>dwStatus;<SPAN style="mso-spacerun: yes">
</SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes">
</SPAN>DWORD<SPAN
style="mso-spacerun: yes">
</SPAN>dwLength; </SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes">
</SPAN>ISequentialStream*<SPAN style="mso-spacerun: yes">
</SPAN>pISeqStream;</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes"> </SPAN>};</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes"> </SPAN>BLOBDATA
BLOBGetData;</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes"> </SPAN>BLOBDATA
BLOBSetData;</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>const ULONG
cBindings = 1;</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US><SPAN
style="mso-spacerun: yes"> </SPAN>DBBINDING
rgBindings[cBindings]; </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>HRESULT hr =
S_OK;</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>IAccessor*<SPAN
style="mso-spacerun: yes">
</SPAN>pIAccessor<SPAN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -