如何用update更新image字段

liutiaoer 2010-10-29 10:04:06
数据库中有两个字段是image类型的,当我只需要更新一个image字段时怎么写sql语句?
m_File_pRec->Open("select * from VOICE_FILE",m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
m_File_pRec->PutCollect("pcm_id",double(Voice_No));
if(varBLOB.vt==(VT_ARRAY|VT_UI1))
{
m_File_pRec->GetFields()->GetItem("adpcm_file")->Value= varBLOB;//保存到数据集对象
}
if(varBLOB2.vt==(VT_ARRAY|VT_UI1))
{
m_File_pRec->GetFields()->GetItem("pcm_file")->Value= varBLOB2;//保存到数据集对象
}

m_File_pRec->Update();
当我只更新“adpcm_file”时会m_File_pRec->Update();出错,有没有更好的办法更新image字段?
...全文
629 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
liutiaoer 2010-11-12
  • 打赏
  • 举报
回复
自己解决了,结帖!
liutiaoer 2010-10-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dawugui 的回复:]
你把存储过程中那句中的变量换为你需要的东西就行了。

EXEC master..xp_cmdshell @exec_str ,no_output
[/Quote]
我还是看不太懂
liutiaoer 2010-10-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fredrickhu 的回复:]
转换成2进制来更新
[/Quote]
能不能说具体点,写个例子?
m_File_pRec->GetFields()->GetItem("adpcm_file")->Value= varBLOB;//保存到数据集对象
就是通过读文件转换成二进制流的呀
variant_t varBLOB;
variant_t varOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);
pStm->PutType(adTypeBinary);
pStm->Open( varOptional,adModeUnknown, adOpenStreamUnspecified, _bstr_t(), _bstr_t());
pStm->LoadFromFile((LPCSTR)_bstr_t(ADPCM_Path));//读入文件
variant_t varBLOB=pStm->Read(adReadAll);
liutiaoer 2010-10-29
  • 打赏
  • 举报
回复
dawugui楼主可不可以不用存储过程,直接用sql语句更新其中一个image字段的值
liutiaoer 2010-10-29
  • 打赏
  • 举报
回复
怎么没有人回答呀?当其中一个值为空时,更新就会出错
dawugui 2010-10-29
  • 打赏
  • 举报
回复
create PROCEDURE sp_textcopy (  
@srvname varchar (30),
@login varchar (30),
@password varchar (30),
@dbname varchar (30),
@tbname varchar (30),
@photoname varchar (30),
@filename varchar (30),
@whereclause varchar (40),
@direction char(1))
AS
DECLARE @exec_str varchar (255)
SELECT @exec_str =
'textcopy /S ' + @srvname +
' /U ' + @login +
' /P ' + @password +
' /D ' + @dbname +
' /T ' + @tbname +
' /C ' + @photoname +
' /W " ' + @whereclause +
'" /F ' + @filename +
' / ' + @direction
EXEC master..xp_cmdshell @exec_str ,no_output

create table photo(id int identity(1,1),photo image,memo nvarchar(50) default 'my photo ')
go
insert photo(photo) values(0x) -- 必须的,且不是null
select * from photo
--truncate table photo

sp_textcopy 'roy ', 'sa ', 'wuxi ', 'test ', 'photo ', 'photo ', 'E:\photo\myphoto\roy3.jpg ', 'where id=5 ', 'I ' --注意条件是 id=1


3、读入
sp_textcopy 'roy ', 'sa ', 'wuxi ', 'test ', 'photo ', 'photo ', 'E:\photo\photo\21.jpg ', 'where id=1 ', 'I ' --注意条件是 id=1

sp_textcopy 'roy ', 'sa ', 'wuxi ', 'test ', 'photo ', 'photo ', 'E:\photo\photo\33.jpg ', 'where id=2 ', 'I ' --注意条件是 id=2

go

4、读出成文件
sp_textcopy 'roy ', 'sa ', 'wuxi ', 'test ', 'photo ', 'photo ', 'E:\photo\roy.jpg ', 'where id=1 ', 'O ' --注意条件是 id=1
sp_textcopy 'roy ', 'sa ', 'wuxi ', 'test ', 'photo ', 'photo ', 'E:\photo\roy1.jpg ', 'where id=2 ', 'O '
sp_textcopy 'roy ', 'sa ', 'wuxi ', 'test ', 'photo ', 'photo ', 'E:\photo\roy2.jpg ', 'where id=3 ', 'O '
sp_textcopy 'roy ', 'sa ', 'wuxi ', 'test ', 'photo ', 'photo ', 'E:\photo\roy3.jpg ', 'where id=4 ', 'O '

sp_textcopy 'roy ', 'sa ', 'wuxi ', 'test ', 'photo ', 'photo ', 'c:\bb.doc ', 'where id=5 ', 'O ' --注意条件是 id=2
dawugui 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liutiaoer 的回复:]
dawugui楼主可不可以不用存储过程,直接用sql语句更新其中一个image字段的值
[/Quote]
你把存储过程中那句中的变量换为你需要的东西就行了。

EXEC master..xp_cmdshell @exec_str ,no_output
--小F-- 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 liutiaoer 的回复:]
可不可以直接用sql语句更新?
[/Quote]

转换成2进制来更新
liutiaoer 2010-10-29
  • 打赏
  • 举报
回复
可不可以直接用sql语句更新?

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧