存储过程在VC中调用时和在查询分析器里调用时结果不一样?

evlon 2004-06-08 12:32:30
我写了一个数据导入的存储过程,在使用时发现用VC调用时存储过程执行到一半就退出了,而且还没有提示。结果Excel表中的数据也没有完成导入!

而在查询分析器中调用该存储过程就没有问题?

这是为什么呀?头都 大了!
附:

ALTER proc dbo.usp_importExcelAnalysisData
(
@file varchar(300)
)
as
begin

declare @maxPiCi int
,@SheetName varchar(50)
,@SortID int
,@Rows int
,@strRows varchar(30)
,@sql varchar(3000)
,@InSql varchar(500)
,@InSqlNoHdr varchar(500)
,@SelFields varchar(200)
,@RowCount int

--set @SelFields='应答试呼比,每线话务量,平均通话时长'

Select @Rows=RowsToCount from SheetInfo where SortID=@SortID
select @maxPiCi=max(nPiCi) from dbo.AnalysisData
if(@maxPiCi is NULL) set @maxPiCi=0
--print @maxPiCi

declare cur_SheetName Cursor
for
select SheetName,SortID from SheetInfo order by SortID ASC
open cur_SheetName
fetch next from cur_SheetName into @SheetName,@SortID
while @@Fetch_Status=0
begin
set @inSqlNoHdr='Select * from OPENROWSET(''MICROSOFT.JET.OLEDB.4.0'',''Excel 8.0;HDR=NO;DATABASE='+@file+''','+@SheetName+'$) a Where a.F1 like ''%未入库%'''
--print @inSqlNoHdr
execute(@InSqlNoHdr)
Select @RowCount=@@rowcount
if(@rowCount=0)
begin
set @InSql=' from OPENROWSET(''MICROSOFT.JET.OLEDB.4.0'',''Excel 8.0;HDR=YES;DATABASE='+@file+''','+@SheetName+'$) a'
if(@SortID=0) set @SelFields='对端局名,应答试呼比,每线话务量,平均通话时长'
else set @SelFields='电路群名,应答试呼比,每线话务量,平均通话时长'
Select @Rows=RowsToCount from SheetInfo where SortID=@SortID
if(@Rows is NULL)
set @strRows=''
else
set @strRows='top '+cast(@Rows as varchar)+' '
set @Sql='select '+@strRows+cast ((@MaxPiCi+1) as varchar ) +' as nPiCi ,'
+cast (@SortID as varchar ) +' as SheetSortID ,IDENTITY(int,1,1) as RowID,'+@SelFields+' into #tmpData'+

@inSql+ ';insert into AnalysisData
select * from #tmpData'

--print @Sql
execute(@sql)
end

fetch next from cur_SheetName into @SheetName,@SortID
end
close cur_SheetName
deallocate cur_SheetName
end

GO


...全文
211 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
evlon 2004-06-14
  • 打赏
  • 举报
回复
谢谢邹建建兄和niukl,问题已经解决!
niukl 2004-06-14
  • 打赏
  • 举报
回复
如果上述方法也不行的话,建议你把你的存储过程改成下面这样:
CREATE proc dbo.usp_importExcelAnalysisData
(
@file varchar(300)
)
as
begin

declare @maxPiCi int
,@SheetName varchar(50)
,@SortID int
,@Rows int
,@strRows varchar(30)
,@sql varchar(3000)
,@InSql varchar(500)
,@InSqlNoHdr varchar(500)
,@SelFields varchar(200)

--set @SelFields='应答试呼比,每线话务量,平均通话时长'

Select @Rows=RowsToCount from SheetInfo where SortID=@SortID
select @maxPiCi=max(nPiCi) from dbo.AnalysisData
if(@maxPiCi is NULL) set @maxPiCi=0
print @maxPiCi

declare cur_SheetName Cursor
for
select SheetName,SortID from SheetInfo order by SortID ASC
open cur_SheetName
fetch next from cur_SheetName into @SheetName,@SortID
while @@Fetch_Status=0
begin
set @InSql=' from OPENROWSET(''MICROSOFT.JET.OLEDB.4.0'',''Excel 8.0;HDR=YES;DATABASE='+@file+''','+@SheetName+'$) a'
set @inSqlNoHdr=' from OPENROWSET(''MICROSOFT.JET.OLEDB.4.0'',''Excel 8.0;HDR=NO;DATABASE='+@file+''','+@SheetName+'$) a'
if(@SortID=0) set @SelFields='对端局名,应答试呼比,每线话务量,平均通话时长'
else set @SelFields='电路群名,应答试呼比,每线话务量,平均通话时长'
Select @Rows=RowsToCount from SheetInfo where SortID=@SortID
if(@Rows is NULL)
set @strRows=''
else
set @strRows='top '+cast(@Rows as varchar)+' '
set @Sql='select '+@strRows+cast ((@MaxPiCi+1) as varchar ) +' as nPiCi ,'
+cast (@SortID as varchar ) +' as SheetSortID ,IDENTITY(int,1,1) as RowID,'+@SelFields+' into #tmpData'+

@inSql+ ';insert into AnalysisData
select * from #tmpData'


set @Sql='if (not exists(Select * '+@inSqlNoHdr+' Where a.F1 like ''%未入库%'')) begin '+'execute('''+replace(@sql,'''','''''')+''')'+' end'

print @Sql
execute(@sql)

fetch next from cur_SheetName into @SheetName,@SortID
end
close cur_SheetName
deallocate cur_SheetName
end

GO
zjcxc 2004-06-08
  • 打赏
  • 举报
回复
既然查询分析器中没有问题
说明问题出在你的VC调用处理上

可能的原因:

1.用户权限的问题,执行openrowset需要类似系统管理员(例如)的权限

2.excel文件目录的问题,要求你的excel文件放在sql服务器上.

3.超时的问题,你的数据处理要求较长的时间,执行时发生超时,解决的方法是设置对象的超时属性,以ado为例,设置对象的:
.commandtimeout=0 --sql处理超时,为0表示不限制
.connectimeout=0 --连接超时.
下载代码方式:https://pan.quark.cn/s/a4b39357ea24 全国计算机等级考试二级教程《Python语言程序设计》(2018年版)被视为针对Python入门者和备考人员的核心学习材料。该资料汇总了教材内的所有编程练习答案,这些答案在Python 3.5.3环境经过实际执行测试,从而保障了代码的准确性和应用价值。备考人员借助这些答案,能够评估自身的学习进度,并深入理解和熟练掌握Python编程的基础原理与方法。 1. Python基础理论:Python作为一门高级编程语言,因其简明扼要的语法结构和卓越的功能表现而备受推崇。基础内容涵盖了变量、数据种类(例如整型、浮点型、字符串、布尔型、列表、元组、字典、集合)、逻辑控制(比如条件判断if-else,循环控制for、while)、函数的声明及使用、模块的引入等。 2. Python高级应用:Python的进阶内容涉及异常管理(try-except-finally结构),类与实例(面向对象编程的基础,包含类的构造、对象的生成、属性与方法的运用、继承机制、多态表现),装饰器(用于调整函数或类的功能特性),上下文管理器(借助with语句实现资源管理)等。 3. 数据文件处理:Python配备了全面的文件操作功能,涉及文件的开启、数据读写、关闭操作,以及多种操作模式(例如r模式用于读取,w模式用于写入,a模式用于追加内容等)。此外,还包括文本文件与二进制文件的转换处理,以及文件的位置调整、复制和删除等操作。 4. 标准库的运用:Python的标准库资源极为丰富,比如os模块提供操作系统接口,sys模块用于获取系统参数,random模块可用于生成随机数值,datetime模块负责处...

22,296

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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