_variant_t   vtNull;   
vtNull.vt   =   VT_ERROR;   
vtNull.scode   =   DISP_E_PARAMNOTFOUND   ;    pCommand->CommandText="WCDMA_Get_SC_List";
pCommand->CommandType=adCmdStoredProc;
pParam = pCommand->CreateParameter(_bstr_t("TableName"),adVarChar,adParamInput,32,_variant_t(strWCDMATable));
//AfxMessageBox((char*)_bstr_t(pParam->Value)); 
pCommand->Parameters->Append(pParam);
pRec->Open(_variant_t((IDispatch*)pCommand),/*pConn.GetInterfacePtr()*/vtNull,adOpenStatic,adLockOptimistic,adCmdStoredProc);
//pRec = pCommand->Execute(&vtNull,&vtNull,adCmdStoredProc);
int nSCcount=pRec->GetRecordCount();我通过open和execute两种方法测试都无法获取记录集出来,测试nSCcount=-1,但是实际的存储过程在数据库里面执行是能够返回记录的。Create procedure WCDMA_Get_SC_List 
@MYTABLE varchar(20)
AS
Begin
declare @strSQL varchar(2000)
select @strSQL='SELECT DISTINCT * FROM
(
select PSC_1 AS SC FROM ' +@MYTABLE+ ' WHERE PSC_1 IS NOT NULL
UNION
SELECT PSC_2 FROM ' +@MYTABLE+ ' WHERE PSC_2 IS NOT NULL
UNION
SELECT PSC_3 FROM ' +@MYTABLE+ ' WHERE PSC_3 IS NOT NULL
UNION
SELECT PSC_4 FROM ' +@MYTABLE+ ' WHERE PSC_4 IS NOT NULL
UNION
SELECT PSC_5 FROM ' +@MYTABLE+ ' WHERE PSC_5 IS NOT NULL
UNION
SELECT PSC_6 FROM ' +@MYTABLE+ ' WHERE PSC_6 IS NOT NULL
UNION
SELECT PSC_7 FROM ' +@MYTABLE+ ' WHERE PSC_7 IS NOT NULL
UNION
SELECT PSC_8 FROM ' +@MYTABLE+ ' WHERE PSC_8 IS NOT NULL
UNION
SELECT PSC_9 FROM ' +@MYTABLE+ ' WHERE PSC_9 IS NOT NULL
UNION
SELECT PSC_10 FROM ' +@MYTABLE+ ' WHERE PSC_10 IS NOT NULL
)TMP
ORDER BY SC ASC' EXECUTE(@strSQL)
End执行结果如下:
SC
-----------
1
2
3
15
16
17
18
20
21
25
26
27
30
37
38
39
41
42
43
44
45(21 row(s) affected)

解决方案 »

  1.   

    pRec->Open(_variant_t((IDispatch*)pCommand),/*pConn.GetInterfacePtr()*/vtNull,adOpenStatic,adLockOptimistic,adCmdStoredProc);
    改成如下方式获得记录集:pRec = pCommand->Execute(NULL, NULL, adCmdStoredProc);
      

  2.   

    也是不行!不知道到底问题出在什么地方了?看起来存储过程一进执行,就是结果没有返回?不知道ADO方式,对于SQL的语句有何特殊要求么?我的SQL语句select也不是很复杂啊。
      

  3.   

    没特别要求啊,都是这样做的,这样吧,你改一下存储过程试试,用一个简单的测试下:
    Create procedure WCDMA_Get_SC_List 
    AS
        select * from PSC_1
    GO
      

  4.   

    我就保留一句
    SELECT PSC_1 FROM WCDMA_UE1_TABLE WHERE PSC_1 IS NOT NULL就有记录返回,否则就没有。还有一个怪问题:
    1。这个是有记录返回的
    pRec->Open(_variant_t((IDispatch*)pCommand),/*pConn.GetInterfacePtr()*/vtNull,adOpenStatic,adLockOptimistic,adCmdStoredProc);
    2。这个就没有!!!
    pRec = pCommand->Execute(NULL, NULL, adCmdStoredProc);折腾半天了,希望各位dx能够援手谢谢了。。
      

  5.   

    没搞过sqlserver,是不是因为在存储过程中直接select就能返回,如果用execute(sql)的话就不能返回??
      

  6.   

    郁闷啊,不知道怎么回事。只能修改实现方式了,增加一个表,进行临时数据存放操作。然后写一个最简单的select * from tempTable进行使用了。晕了。
      

  7.   

    晕了,还是用表把,只能这样了。不研究ADO了
      

  8.   

    是CursorType的原因.将Connection的CursorType改成adUseClient试试.