马上注册,结交更多同行朋友,交流,分享,学习。
您需要 登录 才可以下载或查看,没有帐号?注册
x
下面是主要代码~
/* TODO: Add your application code here */
// 定义字符串,保存路径信息
CString pathname;
// 数据库连接初始化
ADOConn m_AdoConn;
m_AdoConn.OnInitDBConnect();
// SQL语句,查询数据库
_bstr_t vSQL;
vSQL = "select * from mdo where name='D:\\Program Files\\Microsoft Visual Studio .NET 2003\\MyWorkSpace\\SaveIntoDB\\Debug\\aa.prt'";
_RecordsetPtr m_pRecord;
m_pRecord = m_AdoConn.GetRecordSet(vSQL);
// 得到image字段的实际大小
long IDataSize = m_pRecord->GetFields()->GetItem("image")->ActualSize;
// 定义缓冲区,把数据库中的image字段的二进制字符保存到缓冲区内
char* m_pBuffer;
if(IDataSize>0)
{
_variant_t varBLOB;
varBLOB = m_pRecord->GetFields()->GetItem("image")->GetChunk(IDataSize);
if(varBLOB.vt == (VT_ARRAY|VT_UI1))
{
if(m_pBuffer = new char[IDataSize+1])
{
char* pBuf = NULL;
SafeArrayAccessData(varBLOB.parray, (void**)[$pBuf)]
memcpy(m_pBuffer, pBuf, IDataSize);
SafeArrayUnaccessData(varBLOB.parray);
}
// 将缓冲区的内容写入文件
pathname = "D:\\bb.prt";
CFile file;
if(!file.Open(pathname, CFile::modeCreate|CFile::modeWrite))
{
CString msg;
msg = "无法打开prt文件!";
AfxMessageBox(msg);
return;
}
file.Write(m_pBuffer, IDataSize);
file.Close();
}
// 提示消息,告知用户已成功将数据库中prt部件取出,并保存到本地
CString msg;
msg = CString("您已经成功将部件文件从资源共享数据库中取出,并保存在本地目录")+ pathname + CString("下!");
AfxMessageBox(msg);
}
// UG加载取出的prt部件
UF_PART_load_status_t error_status;
tag_t part;
char * part_name = "D:\\bb.prt";
UF_PART_open(part_name, [$part, &error_status)]
UF_PART_set_display_part(part);
/* Terminate the API environment */
UF_CALL(UF_terminate());
} |