none
[Access 03] Batch-Query

    Frage

  • Hallo,

    unterstützt Acces 2003 mehrere Queries hintereinander à la:

    string queryString = "SELECT bla FROM blub;" + "SELECT hip FROM hop;" + ... ; OleDBCommand ocmd = new OleDBCommand(queryString, conString); OleDBDataReader odr = ocmd.ExecuteReader(); int i = 0; do{ //odr[i] verarbeiten i++; } while(odr.NextResult())



    • Bearbeitet Flux89 Dienstag, 17. Juli 2012 12:07
    Dienstag, 17. Juli 2012 12:04

Alle Antworten

  • Hallo,

    Flux89 wrote:

    unterstützt Acces 2003 mehrere Queries hintereinander à la:

    string queryString = "SELECT bla FROM blub;"
                                         + "SELECT hip FROM hop;"
                                         + ...                                     ;

    Leider nicht. Jet/ACE egal in welcher Version unterstuetzt nur einzelne
    SQL-Statements, keine Scripts.

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Dienstag, 17. Juli 2012 16:59
    Moderator
  • Hallo,

    man könnte eine UNION Abfrage nutzen:

    etwa so: 

    string queryString = "SELECT bla as Spalte_1 FROM blub " + "UNION SELECT hip as Spalte_1 FROM hop;" + ... ;

    Bei UNION Abfragen muss nur der Spaltenname jeweils eindeutig sein. Die Ergebnisse werden hintereinander ausgegeben.

    In VBA geht das jedenfalls. Probiere es mal aus.

    Sonnige Grüße
    Frank Hoffmann

    Dienstag, 17. Juli 2012 20:44
  • Hallo,

    Frank Hoffmann x28.de wrote:

    man könnte eine UNION Abfrage nutzen:

    etwa so: 

    string queryString ="SELECT bla as Spalte_1 FROM blub "
    +"UNION SELECT hip as Spalte_1 FROM hop;"+...;

    Dem Beispiel im OP wuerde UNION ALL entsprechen.

    Bei UNION Abfragen muss nur der Spaltenname jeweils eindeutig sein. Die
    Ergebnisse werden hintereinander ausgegeben.

    Spaltennamen (sogar die Feldtypen) duerfen durchaus abweichen, aber die
    Anzahl der Spalten muss ueber das gesamte UNION-Konstrukt uebereinstimmen.

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Mittwoch, 18. Juli 2012 10:20
    Moderator
  • Hallo Flux89

    Was genau willst Du machen? Wenn du das so ausführen könntest, dann würdest Du ja mehrere DataReader erhalten, einen je Query im Command. Mit Access hat das relativ wenig zu tun. Ich bin auch nicht sicher, ob .NET unterstützt, dass ein OleDBCommand mehrere Reader erzeugt, vermutlich nicht.

    Wenn Du die Resultsets in einen einzelnen Reader bekommen willst, musst Du eine UNION benutzen, also:

    string queryString = "SELECT bla AS DeinFeld FROM blub UNION SELECT hip FROM hop UNION ..."

    Gruss

    Henry

    Donnerstag, 19. Juli 2012 04:23
  • Wenn du das so ausführen könntest, dann würdest Du ja mehrere DataReader erhalten, einen je Query im Command

    Soweit ich weiss wird nur ein DataReader erzeugt (auch bei Batch-Queries), aber mehrere ResultSets.

    do
    {
      while(myDR.Read()) {//Zeile verarbeiten}
    }
    while(myDR.NextResult())
    So koennte man die Zeilen aller ResultSets durchlaufen.

    • Bearbeitet Flux1989 Freitag, 20. Juli 2012 16:29
    Freitag, 20. Juli 2012 16:28