起步软件技术论坛-X3

 找回密码
 立即注册
搜索
123
返回列表 发新帖
楼主: lotus

【结贴】调用存储过程时返回的字串里面出现乱码?**

[复制链接]
发表于 2008-6-13 15:52:02 | 显示全部楼层
用存储过程返回数据集方式做一下吧,可能是返回参数值时出了问题!
回复 支持 反对

使用道具 举报

发表于 2008-8-28 15:58:03 | 显示全部楼层
我也出现中文变成???
存过内容
If Object_id('tempdb..#ceshil') Is Not Null
Drop Table #ceshi
create  table #ceshi( personalid varchar(20) ,name varchar(20) ,AttendWorkTime Datetime,leavetype  varchar(20),days float,residual varchar(20),years int)





declare @A1 varchar(20)
declare @A2 varchar(20)
declare @A3 Datetime
declare @A4 varchar(20)
declare @A5 float
declare @A6 varchar(20)
declare @A7 int   


declare   @i   int
set   @i=0
while   @i <=@n
begin

     
declare mycursor cursor for select personal.personalid,personal.name,personal.AttendWorkTime,a1.leavetype,isnull(a1.days,0) days,
convert(varchar(32),(SLeave-isnull(a1.days,0))) residual,a1.years
from (select personalid,psnid,name,AttendWorkTime,case  when (dateadd(yy,10,attendworktime) >@NowDate)
and (dateadd(yy,1,attendworktime) <=@NowDate)  then 5 when(dateadd(yy,20,attendworktime) >@NowDate)
and (dateadd(yy,10,attendworktime) <=@NowDate)  then 10 when dateadd(yy,20,attendworktime) <=@NowDate  then 15
else 0 end SLeave   from personalinfo) personal left join (SELECT personalid,sum(ActualLeaveDays) days ,datepart(year,startingtime) years,leavetype
FROM leave where zt='2' and leavetype ='年休假'and datepart(year,startingtime)=(@StYear+@i)
group by personalid,leavetype,datepart(year,startingtime))a1  on personal.personalID=a1.personalid  
where (isnull (a1.years,0)<>0) and (a1.years=(@StYear+@i)) and (personal.psnid=@NameId)

open mycursor                  
fetch next from mycursor  into @A1,@A2 ,@A3 ,@A4 ,@A5 ,@A6 ,@A7   
while(@@fetch_status=0)     
begin

       INSERT INTO #ceshi VALUES (@A1,@A2,@A3,@A4,@A5,@A6,@A7)   
        fetch next from mycursor into @A1,@A2 ,@A3 ,@A4 ,@A5 ,@A6 ,@A7     

end
close mycursor        
deallocate mycursor


declare mycursor cursor for select  personal.personalid,personal.name,personal.AttendWorkTime,a1.leavetype,isnull(a1.days,0) days,
'/' residual,a1.years
from (select personalid,psnid,name,AttendWorkTime,case  when (dateadd(yy,10,attendworktime) >@NowDate)
and (dateadd(yy,1,attendworktime) <=@NowDate)  then 5 when(dateadd(yy,20,attendworktime) >@NowDate)
and (dateadd(yy,10,attendworktime) <=@NowDate)  then 10 when dateadd(yy,20,attendworktime) <=@NowDate  then 15
else 0 end SLeave   from personalinfo) personal left join (SELECT personalid,sum(ActualLeaveDays) days ,datepart(year,startingtime) years,leavetype
FROM leave where zt='2' and leavetype <>'年休假'and datepart(year,startingtime)=(@StYear+@i)
group by personalid,leavetype,datepart(year,startingtime))a1  on personal.personalID=a1.personalid  
where (isnull (a1.years,0)<>0) and (a1.years=(@StYear+@i)) and (personal.psnid=@NameId)

open mycursor                   --打开游标
fetch next from mycursor  into @A1,@A2 ,@A3 ,@A4 ,@A5 ,@A6 ,@A7    --开始抓第一条数据
while(@@fetch_status=0)     --如果数据集里一直有数据
begin
        INSERT INTO #ceshi VALUES (@A1,@A2,@A3,@A4,@A5,@A6,@A7)    --开始做想做的事(什么更新呀,删除呀)
        fetch next from mycursor into @A1,@A2 ,@A3 ,@A4 ,@A5 ,@A6 ,@A7      --跳到下一条数据
end
close mycursor        --关闭游标
deallocate mycursor  --删除游标



        set @i=@i+1   
end

select *  from #ceshi
Drop Table #ceshi
只要是中文都变成?号,在数据库里显示的没问题但是一在平台上直接调用存过显示就是中文变?号
回复 支持 反对

使用道具 举报

发表于 2008-8-28 16:03:30 | 显示全部楼层
数据库的那个字段是什么类型的?  数据库的字符集是什么?
回复 支持 反对

使用道具 举报

发表于 2008-8-28 16:06:15 | 显示全部楼层
varchar(20) 上面不是写了么就是定义的name 和leavetype  用的临时表
数据集直接调的存过,功能也是直接显示数据集对应的存过
回复 支持 反对

使用道具 举报

发表于 2008-8-28 16:12:42 | 显示全部楼层
存储过程数据集中参数属性,字段的dataType是设置的是什么?
回复 支持 反对

使用道具 举报

发表于 2008-8-28 16:15:51 | 显示全部楼层
不是
回复 支持 反对

使用道具 举报

发表于 2008-8-28 16:18:48 | 显示全部楼层
平台上没对name 和leavetype  进行设置,就是直接调用存过数据集显示
回复 支持 反对

使用道具 举报

发表于 2008-8-28 16:19:59 | 显示全部楼层
DataSetBroker1.DataSet.Close;
  DataSetBroker1.DataSet.Params.ParamByName('@NowDate').AsDateTime := Business.Data.SysSrv.SysService.Time;
  DataSetBroker1.DataSet.Params.ParamByName('@StYear').AsInteger := 2008;
  DataSetBroker1.DataSet.Params.ParamByName('@N').AsInteger := 0;
  DataSetBroker1.DataSet.Params.ParamByName('@NameId').AsString := 'mingzi';
  DataSetBroker1.DataSet.Open;
功能上代码只有这个
回复 支持 反对

使用道具 举报

发表于 2008-8-28 16:44:28 | 显示全部楼层
用 nvarchar替换varchar试试
回复 支持 反对

使用道具 举报

发表于 2008-8-28 16:50:43 | 显示全部楼层
ok可以了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-21 02:42 , Processed in 0.042240 second(s), 13 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表