Announcement

Collapse
No announcement yet.

[DataSet] Zeile in Spalte umwandeln ?!

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • [DataSet] Zeile in Spalte umwandeln ?!

    Hallo,
    nach fast einem Monat bin ich nun endlich soweit, dass ich meine Daten aus einem Excel File in eine MSSQL Datenbank speichern kann (Danke Jürgen Thomas und Andreas Kosch !)
    Jetzt stehe ich allerdings vor einer neuen Herausforderung.
    Daten aus der Excel Tabelle, in Form einer Zeile, sollen in eine eigene Tabelle gespeichert werden.

    Code:
    ExcelConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; " & _
                                                                            "data source=" & path & ";" & _
                                                                            "Extended Properties='Excel 8.0;HDR=No;'")
    
                    cmdFill = New System.Data.OleDb.OleDbDataAdapter("select * from [Sheet$" & range & "]", ExcelConnection)
                    cmdFill.Fill(DtSet)
    Jetzt wird mir in meinem DataSet natürlich nur eine einzige Zeile gespeichert und ich finde einfach keinen Weg, die Felder dieser Zeile einer Spalte zuzuordnen. Ist das einigermaßen verständlich rübergekommen ?

    Vielleicht ist euch ja eine einigermaßen elegante Methode bekannt.

    Vielen Dank !

    //Edit: Und falls Ihr eine Möglichkeit kennt, mit SQL auf eine bestimmte Spalte anhand der Spaltennummer, zuzugreifen lasst es mich bitte wissen

  • #2
    Hallo!

    Eine gute Nachricht! Dein Beispiel funktioniert!

    Beim Nachbau ist mir folgendes aufgefallen:
    1. Heist dein Datenblatt in der Excelmappe "Sheet" oder "Tabelle1"?
    Eigentlich muss ein Exception geworfen werden, wenn das nicht richtig ist.
    2. Lass mal den Range-Bereich weg z.B. "select * from [Tabelle1$]".

    Wenn du mit VS2005 arbeitest kanst du im Debugger das DtSet beobachten. Bei mir ist nach der Fill-Methode der Inhalt im DataSet enthalten.

    Zum Thema Spaltennummer (Spalte <-> Zeile?):
    Wenn du auf eine bestimmte "Datenzeitle" zugreifen willst, so gibt es keine.
    SQL ist mengenorientiert.
    Du kannst nur eine Spalte in deiner Quelltabelle eine fortlaufende Nummerierung erzeugen (Schlüssel in DB).
    Wenn man dann nach einen bestimmten Schlüssel sucht, so hat man dann die Daten dieser Zeile.

    mfg
    Thomas

    Comment


    • #3
      Guten Morgen !

      Danke Thomas, aber dass mit dem Sheet stimmt schon, da ich die Englische Version von Excel verwende und den Sourcecode ein wenig umgeändert habe, bevor ich ihn hier gepostet habe.

      zu 2:
      Die Range, sie funktioniert übrigens auch, brauche ich um eine bestimmte Zeile aus dem Excelblatt in die Datenbank zu kopieren (siehe Anhang, rote Markierung).
      Wenn ich das ganze jetzt, wie in meinem Codesnip gezeigt, in ein DataSet kopiere, erhalte ich eine Zeile mit den Namen.
      Diese Zeile möchte ich aber untereinander, in einer Spalte also, in der Datenbank speichern.
      Entschuldige bitte, dass ich mich in meinem ersten Post nicht allzu klar ausgedrückt habe, aber ich war gestern mit meinen Nerven schon am Ende

      Zur Spaltennummer:
      Ich habe für das ganze jetzt eine Lösung gefunden, indem ich meine Tabellenstruktur in der Datenbank ein wenig abgeändert habe.

      MfG
      nebula
      Attached Files

      Comment


      • #4
        Hallo!

        Leider kann ich nicht detailliert weiter helfen (Zeitdruck).
        Ich glaube aber verstanden zu haben.
        Es geht nur um die Datenzeile die makiert wurde.
        Dann heist die Lösung: Pivot bzw. Unpivot
        Suche nach diesen Begriff im Internet nach unpivot. Es läuft auf folgende hinaus:

        select f1 from tabelle where f1 is not null
        union all
        select f2 from tabelle where f2 is not null
        union all
        .....


        mfg
        Thomas
        Zuletzt editiert von Thomas Sparenberg; 24.08.2007, 13:13.

        Comment

        Working...
        X