_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)
改成如下方式获得记录集:pRec = pCommand->Execute(NULL, NULL, adCmdStoredProc);
Create procedure WCDMA_Get_SC_List
AS
select * from PSC_1
GO
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能够援手谢谢了。。