XML File in DataSet und DataSet über ODBC in Oracle DB



  • Hallo alle zusammen,

    ich habe auf http://www.codeproject.com/KB/cpp/dataset.aspx eine Anleitung gefunden um XML Dateien in ein DataSet und dieses in eine SQL Datenbank zu speichern.

    Mein XML File sieht folgendermaßen aus:

    <?xml version="1.0"?>
    <NewDataSet>
      <table>
        <WERT1>Text1</WERT1>
        <WERT2>Text2</WERT2>
        <WERT3>Text3</WERT3>
      </table>
    </NewDataSet>
    

    Meine für ODBC abgeänderte Funktion folgendermaßen:

    void writeToDatabase(void)
    {
    	String ^verbindungsstr;
    
    	OdbcDataAdapter ^dbAdapter;
    	DataSet ^dataSet1;
    	OdbcTransaction ^OdbcTrans;
    
    	dbAdapter = nullptr;
    	dataSet1 = nullptr;
    	OdbcTrans = nullptr;
    
    	try
    		{
    			verbindungsstr = "Driver={Oracle in ODBC_HOME}";
    
    			OdbcConnection ^verbindung = gcnew OdbcConnection(verbindungsstr);
    			verbindung->Open();
    
    			dataSet1->ReadXml(PfadXmlDatei, XmlReadMode::ReadSchema);
    
    			OdbcTrans = verbindung->BeginTransaction();
    
    			String ^abfrageString = "SELECT * FROM table";
    			dbAdapter = gcnew OdbcDataAdapter(abfrageString, verbindung);
    
    			OdbcCommandBuilder ^tableCommand = gcnew OdbcCommandBuilder(dbAdapter);
    
    			dbAdapter->SelectCommand->Transaction = OdbcTrans;
    
    			dbAdapter->Update (dataSet1, "table");
    
    			OdbcTrans->Commit();
    
    		}
    
    		catch (Exception ^e)
    		{
    
    			if (OdbcTrans != nullptr){
    				OdbcTrans->Rollback();
    			}
    
    		}
    }
    

    Leider funktioniert dies noch nicht so ganz, kann mir jemand helfen wo mein Fehler liegt?

    Vielen Dank
    Gruß BeginnerX



  • Habe mich mal kurz mit dem Debugger beschäftigt. Bin leider noch absoluter Anfänger, aber wie mir scheint steigt mein Programm bei

    OdbcTrans = verbindung->BeginTransaction();
    

    aus und springt zur Exception



  • Dann poste doch mal den Text der Exception.



  • Welchen Text der Exception?

    Ich setze einen Haltepunkt in Zeile 15 meines Codes. Danach für ich den Code Zeilenweise aus, wobei der Debugger nach Zeile 20 direkt zu Zeile 37 springt.

    Mehr passiert nicht...



  • Dann nimm die Fehlerbehandlung bei Zeile 36 raus, dann erhälst du einen Fehler, oder gib an was in 37 e für einen Wert hat.



  • Ok, ohne die Fehlerbehandlung erhalte ich folgenden Fehler:

    Eine nicht behandelte Ausnahme des Typs
    "System.NullReferenceException" ist in System.Data.dll aufgetreten.

    Zusätzliche Informationen: Der Objektverweis wurde nicht auf eine
    Objektinstanz festgelegt.



  • Eijajeijajei...

    Da hat wohl die Instanz gefehlt:

    dataSet1 = gcnew DataSet();
    

    Danke an alle, bis zum nächsten Problem...


Anmelden zum Antworten