MFC/MS-SQL: Problem bei StoredProcedure mit Variablen-Größe?



  • Hallo zusammen,

    ich greife in meiner Anwendung (MFC) auf StoredProcedures (MS-SQL-Server) zu.

    Jetzt bin ich allerdings auf ein Problem gestoßen und meine Anwendung stürzt - ohne Fehlermeldung - ab.

    Irgendwo in diesem Code-Fragment passiert es..

    int iSize
    VARIANT vVariable;
    std::string datei_inhalt = "";	
    
    //Input-Parameter erstellen
    this->makeXmlParameter(datei_inhalt); //Funktion um eine TXT-Datei zeilenweise einzulesen (XML-Format)
    vVariable.bstrVal = bstr_t(inhalt.c_str()); //datei_inhalt konvertieren + an vVariable übergeben
    iSize =datei_inhalt.length() + 1;
    
    ....
    
    //Input-Parameter an StoredProcedur übergeben
    m_Cmd->Parameters->Append(m_Cmd->CreateParameter(bstr_t("@inputparameter"), 
    												 ADODB::adVarChar, 
    												 ADODB::adParamInput, 
    												 iSize,
    												 vVariable));						
    
    ....
    
    //Funktion zum Einlesen der TXT-Datei
    bool makeXmlParameter(std::string &inhalt)
    {
    	std::ifstream xml_datei;
    	string zeile = "";
    
    	xml_datei.open("C:\\eine_datei.txt", std::ios_base::in);
    	if(xml_datei.is_open())
    	{
    	 while(!xml_datei.eof())
    	 {
    		 std::getline(xml_datei, zeile);
    		 inhalt = inhalt + zeile; 
    	 }
    	}
    	xml_datei.close();
    }
    ....
    

    Normalerweise funktioniert das problemlos.
    Allerdings scheint es mit der Größe der TXT-Datei ein Problem zu geben.
    Mit 21KB tritt der Fehler auf - ist die Datei kleiner, so funktioniert alles wieder.

    Ich konnte ausserdem festestellen, dass der Fehler schon auftritt, bevor überhaupt die StoredProcedur aufgerufen wurde - es muß somit ein Problem auf der MFC-Seite sein.

    Ich könnte mir vorstellen, dass vielleicht die Variant- oder String-Variablen nur eine bestimmte Größe annimmt, oder vielleicht die Variable iSize eine falsche Größe enthält?
    Vielleicht muss ich mit einem SafeArray arbeiten - keine Ahnung - ich bekomme ja keine Fehlermeldung...

    Hat jemand eine Idee woran es liegen könnte?


Anmelden zum Antworten