========================
table_test表的结构如下:
IDx int
aaa nvarchar(50)
bbb nvarchar(50)表中数据如下:
IDx aaa bbb
1 a1 b1
2 a2 b2========================
存储过程如下:
@ID1 int = 1,
@ID2 int = 2 ASBEGIN
declare @select1 table
(a nvarchar(50),b nvarchar(50) );
insert into @select1(a,b)
select aaa,bbb from cletgem_test;
select * from @select1;END
==============================
ADO调用这个存储过程的代码如下: inline void TESTHR(HRESULT x) { if FAILED(x) _com_issue_error(x);} _RecordsetPtr pRst = NULL;
_CommandPtr pCmd = NULL;
_ParameterPtr pPrm1 = NULL;
_ParameterPtr pPrm2 = NULL;
_ConnectionPtr pConn = NULL; HRESULT hr = S_OK;
VARIANT vtID1;
VARIANT vtID2;
vtID1.vt = VT_I4;
vtID2.vt = VT_I4;
vtID1.lVal = 1;
vtID2.lVal = 2; //通过udl文件文件连接数据库
CString strConnect = _T("File Name=");
strConnect += mdbName;
try
{
TESTHR(pConn.CreateInstance(__uuidof(Connection)));
hr = pConn->Open(_bstr_t(LPCTSTR(strConnect)), "", "", adConnectUnspecified);
pConn->CursorLocation = adUseClient; TESTHR(pCmd.CreateInstance(__uuidof(Command)));
pCmd->CommandText = strProc;
pCmd->CommandType = adCmdStoredProc;
pPrm1 = pCmd->CreateParameter("@ID1",adInteger,adParamInput,sizeof(long),vtID1);
pPrm2 = pCmd->CreateParameter("@ID2",adInteger,adParamInput,sizeof(long),vtID2);
pCmd->Parameters->Append(pPrm1);
pCmd->Parameters->Append(pPrm2);
pPrm1->Value = vtID1;
pPrm2->Value = vtID2; pCmd->ActiveConnection = pConn; //错误发生处
pRst = pCmd->Execute(NULL,NULL,adCmdStoredProc); if( adStateOpen == pCmd->State )
vtID2 = vtID2;//错误发生时该条件不能成立
pRst->MoveFirst();
return TRUE;
} catch(_com_error &e)
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescritpion(e.Description());
return FALSE;
}
}=================================================================问题:
当调用不含表变量的存储过程时,这段代码工作能够将结果取出,但是,当存储过程中包含表变量(比如上示)时,就不正常了=================================================================为什么呢?怎么办呢?项目被这个问题卡住,咳不出来又咽不下去,快憋死了
table_test表的结构如下:
IDx int
aaa nvarchar(50)
bbb nvarchar(50)表中数据如下:
IDx aaa bbb
1 a1 b1
2 a2 b2========================
存储过程如下:
@ID1 int = 1,
@ID2 int = 2 ASBEGIN
declare @select1 table
(a nvarchar(50),b nvarchar(50) );
insert into @select1(a,b)
select aaa,bbb from cletgem_test;
select * from @select1;END
==============================
ADO调用这个存储过程的代码如下: inline void TESTHR(HRESULT x) { if FAILED(x) _com_issue_error(x);} _RecordsetPtr pRst = NULL;
_CommandPtr pCmd = NULL;
_ParameterPtr pPrm1 = NULL;
_ParameterPtr pPrm2 = NULL;
_ConnectionPtr pConn = NULL; HRESULT hr = S_OK;
VARIANT vtID1;
VARIANT vtID2;
vtID1.vt = VT_I4;
vtID2.vt = VT_I4;
vtID1.lVal = 1;
vtID2.lVal = 2; //通过udl文件文件连接数据库
CString strConnect = _T("File Name=");
strConnect += mdbName;
try
{
TESTHR(pConn.CreateInstance(__uuidof(Connection)));
hr = pConn->Open(_bstr_t(LPCTSTR(strConnect)), "", "", adConnectUnspecified);
pConn->CursorLocation = adUseClient; TESTHR(pCmd.CreateInstance(__uuidof(Command)));
pCmd->CommandText = strProc;
pCmd->CommandType = adCmdStoredProc;
pPrm1 = pCmd->CreateParameter("@ID1",adInteger,adParamInput,sizeof(long),vtID1);
pPrm2 = pCmd->CreateParameter("@ID2",adInteger,adParamInput,sizeof(long),vtID2);
pCmd->Parameters->Append(pPrm1);
pCmd->Parameters->Append(pPrm2);
pPrm1->Value = vtID1;
pPrm2->Value = vtID2; pCmd->ActiveConnection = pConn; //错误发生处
pRst = pCmd->Execute(NULL,NULL,adCmdStoredProc); if( adStateOpen == pCmd->State )
vtID2 = vtID2;//错误发生时该条件不能成立
pRst->MoveFirst();
return TRUE;
} catch(_com_error &e)
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescritpion(e.Description());
return FALSE;
}
}=================================================================问题:
当调用不含表变量的存储过程时,这段代码工作能够将结果取出,但是,当存储过程中包含表变量(比如上示)时,就不正常了=================================================================为什么呢?怎么办呢?项目被这个问题卡住,咳不出来又咽不下去,快憋死了
解决方案 »
- richeidt 中插入的ole图片 怎么判断用户点击的是哪个Ole
- 【All】散分了!!!!混到星星了!!!!!
- blog出错了?
- ●●请解释一下什么是C Runtime函数●●
- 有关pTree->GetItem 的问题
- 看到一个dao编写的地址薄的程序,在写sql语句时为何没有显式的delete,insert等等,而只是name=xxx或者是[name]=xxx就行了?(name是关键字))
- 完成端口和线程池是什么关系?
- ----------------------怎么获知一个句柄所关联的namespace,300!!!!!!!!!!------------------------
- 关于COM组件的版本控制问题。
- 200分求MFC或ATL的类似VB中的EVENTSINK的简单实现
- 逻辑坐标和设备坐标
- VB调用VC写的dll,第二次调用CSocket的Create出错
感谢各位老师同学们热心的帮助,该问题的讨论主要集中在下贴中进行,欢迎前往指教http://community.csdn.net/Expert/topic/5223/5223770.xml?temp=.2376215