Bonjour,

Les 2 fournisseurs (providers) sont : Microsoft OleDb for Oracle et Oracle OleDb Provider qui est fait par Oracle lui-même. Celui de Ms semble le plus facile à prendre en main mais ne supporte pas bcp de choses comme les BLOB !! Donc, celui d'Oracle est conseillé mais ...
Le problème dans mon cas c'est lors de l'utilisation du type "_CommandPtr" d'ADO pour exécuter une procédure stockée; avec le même problème mais provider différent, le programme (en C++ ici) crashe avec Oracle Provider
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
35
36
37
38
39
40
41
42
   strTmp = "Provider=OraOLEDB.Oracle;Password=christmas;Persist Security Info=True;User ID=system;Data Source=mabase";
    _bstr_t         bstrSQLServerConnect;
	_bstr_t bstrProc = ( L"sp_StartByteImport" );;
	_variant_t Final;
     bstrSQLServerConnect = (LPCTSTR) strTmp;
	m_status="Empty File";
	_ConnectionPtr  Conn1;
    _CommandPtr     Cmd1;
    _RecordsetPtr   Rs1;
	bool            bvalid = false;
	_bstr_t bstrProc2 ="sp_AddAccountingInfo";
	try
    {
	  	Conn1.CreateInstance( __uuidof( Connection ) );
		Conn1->ConnectionString = bstrSQLServerConnect;
		Conn1->Open( bstrEmpty, bstrEmpty, bstrEmpty, adConnectUnspecified );//rjn: 4th param
		Cmd1.CreateInstance( __uuidof( Command ) );
		Cmd1->ActiveConnection = Conn1;
		Cmd1->CommandText      = _bstr_t( bstrProc );
		Cmd1->CommandType      = adCmdStoredProc;
		Cmd1->Parameters->Refresh();
		Cmd1->Parameters->Item[ _variant_t( (long) 1 ) ]->Value = _variant_t( (LPCTSTR)m_sfilename );
		Rs1 = Cmd1->Execute( &vtEmpty, &vtEmpty2, adCmdUnknown );
		bvalid = true;
		Final = Rs1->Fields->GetItem( _variant_t( 0L ) )->Value;
		strTmp.Format( "%s", CrackStrVariant( Final) );
    }
    catch( CException *e )
    {
		TCHAR    szCause[255];    
        e->GetErrorMessage(szCause, 255);
		m_status=szCause;
    }
    catch( _com_error &e )
    {
		m_status=e.ErrorMessage( );
    }
    catch(...)
    {
		m_status="Error while executing the Import";
 
    }
Le catch d'exception est exécuté lorsqu'on arrive à la ligne Cmd1->Parameters->Refresh();
Il y a donc problème avec Cmd1->Parameters car même exception lors long nPrmCount = Cmd1->Parameters->Count

C'est vrai c'est du VC++ mais le problème c'est avant tout Oracle (je pense), rien que les habitués d'Oracle peuvent le résoudre