ADO und insert



  • Frage bezüglich ADO und insert
    Ich mache es so

    CommandPtr cmd;
    cmd.CreateInstance(__uuidof(Command));
    cmd->CommandTimeout = timeout;            
    cmd->ActiveConnection = getConnection(); 
    cmd->CommandText = (const char *)sql;
    
    _variant_t count(DISP_E_PARAMNOTFOUND, VT_ERROR);
    _variant_t parameters(DISP_E_PARAMNOTFOUND, VT_ERROR);
    long option = adCmdText;            // adExecuteRecord
    _RecordsetPtr rs = cmd->Execute(&count, &parameters, option);<- ist es nicht besser ??
    _RecordsetPtr rs = cmd->Execute(&count, NULL, option); <- so mache ich
    

    Gut kann man vielleicht noch den inset beschleunigen ??
    Also mein Problem ist das ich muss sehr große Datenmengen inserten und je länger der insert läuft desto langsamer er ist

    😞 😡



  • Ok, ich gebe auf ADO ist einfach sooooooooooooooooooo langsam 😢



  • 007ski schrieb:

    Frage bezüglich ADO und insert
    Ich mache es so

    CommandPtr cmd;
    cmd.CreateInstance(__uuidof(Command));
    cmd->CommandTimeout = timeout;            
    cmd->ActiveConnection = getConnection(); 
    cmd->CommandText = (const char *)sql;
    
    _variant_t count(DISP_E_PARAMNOTFOUND, VT_ERROR);
    _variant_t parameters(DISP_E_PARAMNOTFOUND, VT_ERROR);
    long option = adCmdText;            // adExecuteRecord
    _RecordsetPtr rs = cmd->Execute(&count, &parameters, option);<- ist es nicht besser ??
    _RecordsetPtr rs = cmd->Execute(&count, NULL, option); <- so mache ich
    

    Gut kann man vielleicht noch den inset beschleunigen ??
    Also mein Problem ist das ich muss sehr große Datenmengen inserten und je länger der insert läuft desto langsamer er ist

    😞 😡


  • Mod

    Baue kein volles SQL Statement auf. Benutze Parameter und lass nicht immer Deinen ganzen Code unten ablaufen.



  • Es kommt auch auf den Server drauf an.
    Die schnellste Möglichkeit die ich kenne, mit ADO Daten zu SQL Server 2008 hochzuladen, ist vorformatierte SQL-Batches mit jeweils ein paar tausend Zeilen zu schicken.

    INSERT my_table (a, b)
        VALUES (1, 1),
        (1, 2),
        (1, 3),
        (1, 4),
    ...
        (1, 999);
    

    Der Unterschied zu einzelnen INSERTs ist massiv (weiss nimmer genau, Faktor 10-100 oder so).

    Das ist schneller als alles andere was ich ausprobiert habe, was man direkt über eine ADO Connection machen könnte (SqlBulkCopy in ADO .NET und diverse Commandline Utilities sind auch verdammt schnell).


Anmelden zum Antworten