存储过程在VC中调用时和在查询分析器里调用时结果不一样?
我写了一个数据导入的存储过程,在使用时发现用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
而在查询分析器中调用该存储过程就没有问题?
这是为什么呀?头都 大了!
附:
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
...全文
相关推荐
VC中调用CMD命令并获取调用结果
VC中调用CMD命令并获取调用结果"这个主题就是关于如何在VC++程序中通过命令行(CMD)执行命令,并且捕获这些命令的输出结果。下面将详细解释这一过程。
ADO调用存储过程||ADO读取结果集
总之,使用ADO调用存储过程并在VC6.0中显示结果集是一项常见的任务,通过理解ADO的基本操作和ListView的使用,我们可以方便地完成这一工作。
VC ADO调用存储过程
**调用_Execute方法**: 使用_CommandPtr的Execute方法执行存储过程。可以传递一个Recordset对象来接收结果集,或者如果不需要结果集,可以传递NULL。
VC查询Oracle数据(包括存储过程、分页查询)
**分页查询**:在处理大数据量时,分页查询能提高效率并减轻客户端的压力。这通常通过LIMIT和OFFSET在SQL语句中实现,但Oracle不直接支持这两个关键字。
VC调用WMI访问远程主机查询结果错误的问题解决方法
#### 五、总结通过以上步骤,可以有效解决VC调用WMI访问远程主机时`rHresult`一直等于0的问题。关键在于正确设置安全上下文、认证方式和查询语句等内容。


疑难问题
