Probleme beim Datenimport von Excel zu SQL 2005



  • Hallo

    ich hoffe mir kann jemand helfen. Ich möchte Daten aus einem Excelfile in die Datenbank importieren. Bei einfachen string (varchar) Daten ist das kein Problem. Allerdings habe ich auch Spalten in der Datenbank mit Datetime oder int. Da meckert dann die Datenbank dass die DAten nicht von String in Datetime konvertiert werden können. Wie kann ich die Excel-Daten von String in die entsprechenden Daten in der Datenbank konvertieren?

    Vielen Dank für eure Hilfe!



  • erstelle einfach eine neue tabelle im sql-server, in der du alle problematischen felder erstmal auf varchar(max) setzt. dann importierst du über die tasks->import funktion und zum schluss kannst du mit sql-abfragen die daten in der sql-server tabelle manuell in datetime konvertieren.

    update tabelle set feld=convert(feld,datetime,104)



  • Mit diesem Mist habe ich mich auch schon herumgeplagt. Wäre Excel fähig, Daten
    vernünftig zu exportieren wäre vieles einfacher. Normalerweise verwende ich csv,
    notfalls schreibe ich schnell was um es vernünftig importieren zu können.

    Äxl - ätzend.



  • Wie liest du die Excel-Datei aus?



  • Sorry für die späte Antwort, hab noch etwas im Netz gesurft und verschiedene Möglichkeiten ausprobiert. Unter anderem die:

    Ich lade meine Daten in eine DataTable (tableA). Die DataTable clone ich. Dann setze ich den Type der Spalte auf den den ich brauche. Und dann kopiere ich die Zeilen aus tableA in die geklonte Table mit

    cloneTable.InsertRow(tableA.rows[i]);
    

    . Das funktioniert soweit, bis ich auf eine Spalte stoße, die mal keine Werte enthält. In der Datenbank sind in dieser Zeile NUllwerte erlaubt. Er bringt mir allerdings die Fehlermeldung bei InsertRow():

    Die Eingabezeichenfolge hat das falsche Format.<> konnte nicht in der PlannedEnd-Spalte gespeichert werden. Erwarteter Typ: Int32.
    

    Wie kann ich diese Fehlermeldung umgehen? Ich will ja nicht unbedingt Werte in der Spalte haben, und überall 0 eintragen damit was drinsteht und ich die Fehlermeldung nicht mehr bekomme ist ja blöd. Hat mir dazu jemand einen Tipp? Ich habe auch schon versucht einen Nullable Wert einzutragen, also

    int? storage = null;
    

    , aber auch da bekomme ich die Fehlermeldung.



  • Ich habe noch weiter herumprobiert und es geht nicht mal, dass ich eine 0 einfüge, auch dann bekomme ich diese Fehlermeldung mit dem falschen Format. Hat mir jemand einen Rat? Ich komme einfach nicht mehr weiter.

    if (table.Rows[i]["PlannedEnd"].ToString() == "")
                        {                     
                            int? plannedEnd = null;
                            //table.Rows[i]["PlannedEnd"] = plannedEnd;  //funktioniert nicht
                            table.Rows[i]["PlannedEnd"] = 0; //funktioniert auch nicht
                        }
                        copyTable.ImportRow(table.Rows[i]); //Hier passiert der Fehler
    


  • Zur genaueren Erläuterung:

    Die Fehlermeldung in dem Fall, in dem ich versuche in der Spalte einen Wert einzufügen der eigentlich erwartet wird, lautet folgendermaßen:

    Die Zeichenfolge wurde nicht als gültiges DateTime erkannt.<> konnte nicht in der Date-Spalte gespeichert werden. Erwarteter Typ: DateTime.
    

    Der Code dazu:

    if (table.Rows[i]["Date"].ToString() == "")
                        {
                            DateTime time = new DateTime(2009,01,01,0,0,0);
                            table.Rows[i]["Date"] = time;
                        }
                        copyTable.ImportRow(table.Rows[i]);
    

    Was ich nicht verstehe ist, dass ich in die Spalte einen Wert einfüge und den auch abrufen kann, er aber trotzdem keinen Wert erkennt, was mir ja dieses Zeichen hier sagt <>. Oder heisst das nur dass er DateTime in seiner Fehlermeldung nicht anzeigen kann? Naja, wie auch immer, es funktioniert nicht und ich weiss einfach nicht mehr weiter.



  • O.k., das Problem wird immer seltsamer. Hatte ich in einer der besagten Spalten mal etwas drinstehen und lösche das wieder raus, dann meckert er nicht rum. Lade ich aber das Excelfile und versuche es direkt in die Datenbank zu speichern ohne an den leeren Feldern etwas zu ändern, kommt die Fehlermeldung. Also scheint Excel an den leeren Datenfeldern, wenn man als Benutzer dort mal was eingegeben hat und das dann wieder löscht, etwas zu ändern. Kennt sich damit jemand aus?

    Um auf marco.b's Frage mal noch zu antworten:
    Ich lese die Daten mit Hilfe des ODBC-Treibers aus Excel aus.


Anmelden zum Antworten