vc++ 使用command 对象通过parameter 实现插入二进制数据
2008-05-15 22:44
495 查看
想通过command 执行多条记录,避开申请recordset 的开销,找了好长时间终于调试成功了喔,幸福啊
以下是使用步骤
_CommandPtr cmd;
cmd.CreateInstance(__uuidof(Command));
cmd->CommandType=adCmdText;
cmd->CommandText=_T("INSERT INTO TARGET (TARGETID,PICTURE) VALUES(?,?)");
cmd->ActiveConnection = m_Conn;
//添加参数
CFile m_File;
ULONGLONG datalength;
BYTE *filedata;
VARIANT varChunk;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
//读取图片数据
//m_Pic_List 是存放图片文件路径的数组
for ( int i = 0 ; i < m_Pic_List.Count() ; i++ )
{
m_File.Open(m_Pic_List[i],CFile::modeRead|CFile::typeBinary);
datalength = m_File.GetLength();
filedata = new BYTE[datalength];
m_File.Read(filedata,datalength);
m_File.Close();
rgsabound[0].cElements = datalength;
rgsabound[0].lLbound = 0;
psa = SafeArrayCreate(VT_UI1,1,rgsabound);
for (long index =0; index < datalength; index++ )
{
SafeArrayPutElement(psa,&index,&filedata[index]);
}
varChunk.vt = VT_ARRAY|VT_UI1;
varChunk.parray = psa;
//给参数赋值
cmd->Parameters->Refresh();
_ParameterPtr param = cmd->CreateParameter(_T("TARGETID"),adInteger,adParamInput,sizeof(int),_variant_t(targetid));
cmd->Parameters->Append(param);
param = cmd->CreateParameter(_T("PICTURE"),adLongVarBinary,adParamInput,datalength,varChunk);
cmd->Parameters->Append(param);
cmd.Execute(NULL,NULL,NULL);
//清空参数值
cmd->Parameters->Delete(_T("TARGETID"));
cmd->Parameters->Delete(_T("PICTURE"));
}
这是一本ado的详细资料,需要机器安装office2003。至于为什么在它的目录下,我也在寻找答案
c:/program files/common files/microsoft shared/office10/2052/ado210.chm
以下是使用步骤
_CommandPtr cmd;
cmd.CreateInstance(__uuidof(Command));
cmd->CommandType=adCmdText;
cmd->CommandText=_T("INSERT INTO TARGET (TARGETID,PICTURE) VALUES(?,?)");
cmd->ActiveConnection = m_Conn;
//添加参数
CFile m_File;
ULONGLONG datalength;
BYTE *filedata;
VARIANT varChunk;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
//读取图片数据
//m_Pic_List 是存放图片文件路径的数组
for ( int i = 0 ; i < m_Pic_List.Count() ; i++ )
{
m_File.Open(m_Pic_List[i],CFile::modeRead|CFile::typeBinary);
datalength = m_File.GetLength();
filedata = new BYTE[datalength];
m_File.Read(filedata,datalength);
m_File.Close();
rgsabound[0].cElements = datalength;
rgsabound[0].lLbound = 0;
psa = SafeArrayCreate(VT_UI1,1,rgsabound);
for (long index =0; index < datalength; index++ )
{
SafeArrayPutElement(psa,&index,&filedata[index]);
}
varChunk.vt = VT_ARRAY|VT_UI1;
varChunk.parray = psa;
//给参数赋值
cmd->Parameters->Refresh();
_ParameterPtr param = cmd->CreateParameter(_T("TARGETID"),adInteger,adParamInput,sizeof(int),_variant_t(targetid));
cmd->Parameters->Append(param);
param = cmd->CreateParameter(_T("PICTURE"),adLongVarBinary,adParamInput,datalength,varChunk);
cmd->Parameters->Append(param);
cmd.Execute(NULL,NULL,NULL);
//清空参数值
cmd->Parameters->Delete(_T("TARGETID"));
cmd->Parameters->Delete(_T("PICTURE"));
}
这是一本ado的详细资料,需要机器安装office2003。至于为什么在它的目录下,我也在寻找答案
c:/program files/common files/microsoft shared/office10/2052/ado210.chm
相关文章推荐
- jQuery的ajax()检验用户名;通过jQuery的load()/get()/post()方法实现;使用XMLHTTPRequest对象来进行AJAX的异步数据交互
- Greendao 简单实现增删改查使用过GreenDao的同学都知道,3.0之前需要通过新建GreenDaoGenerator工程生成Java数据对象(实体)和DAO对象,非常的繁琐而且也加大了使用成
- Oracle使用Mybatis实现批量插入或修改数据(Oracle)
- 使用js函数实现的通过输入框中数据的长度来控制光标聚焦位置
- 报错:对象必须实现 IConvertible;以分隔符进行分割链接concat_ws的使用方法;mysql数据类型转换cast,convert
- 关于用VC,VB进行图像数据(二进制大对象)存储数据库的一点心
- jface databinding:使用CheckboxTableViewer实现表中(Set)对象与CheckTable中选中条目数据绑定
- 在C#使用文件监控对象FileSystemWatcher 实现数据同步
- java对象和json数据转换实现方式1-使用json-lib实现
- 使用Jquery的Ajax异步提交有二进制数据的表单实现方案
- Java通过Mybatis实现批量插入数据到Oracle中
- 第5章分布式系统模式 使用服务器激活对象通过 .NET Remoting 实现 Broker
- (2)单链表的操作 ① 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数
- 使用文件监控对象FileSystemWatcher实现数据同步
- 使用参数拦截器通过注解直接从JSON对象中获取数据
- Asp.Net使用Bulk实现批量插入数据
- VC中使用ADO实现BLOB数据的存取
- Oracle使用Mybatis实现List批量插入数据
- 关于用VC,VB进行图像数据(二进制大对象)存储数据库的一点心得
- GreenPlum 使用gpload通过gpfdist文件实现数据高速加载