powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / ADO
3 сообщений из 3, страница 1 из 1
ADO
    #33228012
gues_T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытаюсь выполнить хранимую процедуру MSSQL и прочитать возвращаемые ею значения.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
	_bstr_t strCnn("Provider=sqloledb;Data Source=MSSqL;  Initial Catalog=db1;User Id=user;Password=pwd;");
	_ConnectionPtr  pConnection = NULL;
	_CommandPtr     pCmdChange  = NULL;
	_RecordsetPtr   pRs  = NULL;
	_ParameterPtr pprmCmdChange ;
		  

        TESTHR(pConnection.CreateInstance(__uuidof(Connection)));
		pConnection->Open (strCnn, "", "", adConnectUnspecified);

        TESTHR(pCmdChange.CreateInstance(__uuidof(Command)));
        pCmdChange->ActiveConnection = pConnection;
        pCmdChange->CommandText = "sp";
	pCmdChange->CommandType=adCmdStoredProc;
	
	TESTHR(pRs.CreateInstance(__uuidof(Recordset)));

	vtCriteria.vt =  VT_I2;
	vtCriteria.iVal = 2 ;

	pprmCmdChange = pCmdChange->CreateParameter("brand", adInteger,adParamInput, sizeof(int), vtCriteria);
	pprmCmdChange->Value = vtCriteria;
	pCmdChange->Parameters->Append(pprmCmdChange);
	
pRs=pCmdChange->Execute(NULL, NULL, adCmdStoredProc);


А что дальше? Попытка выполнить, к примеру, pRs->MoveNext() вызывает ругань, мол, невозможно выполнить операцию на закрытом рекордсете.
В MSDN про метод Execute объекта AdoCommand пишут "Execute returns a closed Recordset." Ну никак не могу врубиться как же его открыть?!
...
Рейтинг: 0 / 0
ADO
    #33228144
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
int main(){
  _bstr_t ConnStr = "Provider=SQLOLEDB;       \
                     Data Source=(local);     \
                     Initial Catalog=pubs;    \
                     Integrated Security=SSPI";
  _ConnectionPtr conn;
  try {
    conn.CreateInstance(__uuidof(Connection));
    conn->CursorLocation = adUseServer;
    conn->IsolationLevel = adXactReadCommitted;
    conn->Attributes     =  0 ;
    conn->Open(ConnStr,"","",adConnectUnspecified);

    _CommandPtr cmd;
    cmd.CreateInstance(__uuidof(Command));
    cmd->ActiveConnection = conn;
    cmd->CommandType      = adCmdStoredProc;
    cmd->CommandText      = "dbo.byroyalty";

    ParametersPtr pars = cmd->Parameters;
    pars->Append(cmd->CreateParameter("@ret",  adInteger, adParamReturnValue,  0 ,  0 ));
    pars->Append(cmd->CreateParameter("@perc", adInteger, adParamInput,        0 ,  0 ));

    pars->Item[1L]->Value =  100 ;
    _RecordsetPtr rs = cmd->Execute( 0 , 0 ,adOptionUnspecified);

    while(!rs->adoEOF){
      std::cout << _bstr_t(rs->Fields->Item[0L]->Value) << std::endl;
      rs->MoveNext();
    }
  }catch(_com_error &e){
    std::cerr << " Error " << (const char*)e.Description() << std::endl;
  }
  return  0 ;
}
...
Рейтинг: 0 / 0
ADO
    #33229925
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видимо, надо вызывать не Execute, а какой-нибудь Open.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / ADO
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]