Loewchen0507 Geschrieben 2. April 2007 Teilen Geschrieben 2. April 2007 Hi Leute, ich habe ein kleines Problem... Ich schreibe in C# ein kleines Progrämmchen, dass aus einer Excel Datei Daten ausließt und diese in eine SQL Tabelle schreibt. Ansich kein Problem. Nur an einer Stelle... Ich habe "Artikelnummern", die ich auslese. Die sehen wie folgt aus: 1209 1147 1364 etc. sie können aber auch wie folgt aussehen 001-000-000-013 001-000-000-012 ich lese das ganze per OleDbDataReader aus. Alles wunderbar, nur an der Stelle, wo die Artikelnummern die neue Form haben, da klappts nicht mehr. Ich bekomme nur "" zurück... Und genau das wird dan auch ausgegeben und in die Datenbank geschrieben. Hier ein bisschen Code: // Connectionstring zu der entsprechenden Datei festlegen XLSconnStr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Properties.Special.Default.pfad + "/" + fi[z].Name + ";Extended Properties=Excel 8.0"; // Deklarieren und Erstellen des Connectionobjekts OleDbConnection XLSconn = new OleDbConnection(XLSconnStr); //OleDbDataAdapter da = new OleDbDataAdapter(SQLString, conn); OleDbCommand XLScommand = new OleDbCommand(XLSSQLString, XLSconn); // Connection öffnen XLSconn.Open(); // DataReader Objekt zum auslesen erstellen OleDbDataReader reader = XLScommand.ExecuteReader(CommandBehavior.CloseConnection); int i = 0; while (reader.Read()) { if (reader[0].ToString() != "") { //Artikel ArtikelMenge[i,0] = reader[2].ToString(); //Menge ArtikelMenge[i,1] = reader[1].ToString(); So ich hoffe Ihr könnt mir helfen... bin schon total verzweifelt und habe ein Brett vorm Kopf... Bin für jede Anregung dankbar... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MarkusLe Geschrieben 2. April 2007 Teilen Geschrieben 2. April 2007 Werden die beiden unterschiedlichen Artikelnummerformate in Excel als unterschiedliche Typen angegebn? Z.B. Zahl, Text, Standard ... Versuch mal anstatt .ToString() Convert.ToString(...). Hast Du schonmal alles durchdebuggt? Tipp: nicht mit != "" oder != String.Empty vergleichen, .Length == 0 ist deutlich schneller. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Loewchen0507 Geschrieben 2. April 2007 Autor Teilen Geschrieben 2. April 2007 Hi, Ich habe in der Excel Tabelle auch schon versucht umzuformatieren. Die Datei wird automatisch generiert und die Spalte ist ist Formatiert als Standard. Ändere ich das Format in Text, ändert sich leider überhaupt nichts. Ich habe den Typ mal angefragt und bekomme System.DBnull zurück. Deine Convert Idee habe ich ausprobiert. Aber das Ergebnis ist das gleiche. Leider. Und Dein Tipp für die If Anweisung habe ich gerne angenommen und geändert ... wußte ich auch noch nicht... (obwohls logisch ist). LG Loewchen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MarkusLe Geschrieben 2. April 2007 Teilen Geschrieben 2. April 2007 DBNull kommt normalerweise nur dann zurück wenn das Feld komplett leer ist, ich nehme mal an, das DBNull nur bei den zuletzt genannten Artikelnummern zurückkommt. Wie sieht es mit den Restlichen Spalten aus die nach der DBNull-Artikelnummer kommen? Enthalten die die richtigen Werte? P.S. Wie bemerkst Du, dass alle Zeilen gelesen wurden? Sieht fast so aus als würde er darüber hinauslesen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Loewchen0507 Geschrieben 2. April 2007 Autor Teilen Geschrieben 2. April 2007 Hi, nein er ließt nicht drüber hinaus. Momentan habe ich noch einen fixen Wert drin stehen, da die Tabelle immer die gleiche Anzahl an Einträgen (Zeilen) hat. Das muss ich auch noch ändern. Ja DBNull kommt nur bei den langen Artikelnummer zurück. Die Artikelnummern (001-000-000-012) stehen aber am Anfang nicht am Ende der Datei und aus der anderen Spalte ließt er alles einwandfrei heraus... (also die Menge). Im Anhang mal eine Beispiel Datei. LG LoewchenM 001-000-013-000-S.rar Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Loewchen0507 Geschrieben 3. April 2007 Autor Teilen Geschrieben 3. April 2007 Hi Leute, ich schon wieder... leider bin ich immer noch nicht weiter... ich habe mir gedacht, machst es mal mit 'ner Schema.ini... aber ich habe keine Ahnung davon und habe es jetzt mit folgender Schema.ini versucht: [1001.xls] Col2=F2 Char Width 255 resultat ist, dass er nun alle Werte der Spalte mit DBNull zurückgibt... wie gesagt, ich habe noch nie mit schema.inis gearbeitet... vielleicht könnt ihr mir helfen... LG Loewchen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Byteloser Geschrieben 3. April 2007 Teilen Geschrieben 3. April 2007 Du muss den ConnectionString anpassen: ... // Connectionstring zu der entsprechenden Datei festlegen XLSconnStr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Properties.Special.Default.pfad + "/" + fi[z].Name + ";Extended Properties=\"Excel 8.0;IMEX=1\""; ... Bei gemixten Inhalten (zahl/text) erzwingt "IMEX=1", dass Zahlen in Text umgewandelt werden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
realgun Geschrieben 3. April 2007 Teilen Geschrieben 3. April 2007 Zu Schema.ini findest Du ganz allgemein hier was. Allerdings kenne ich die Verwendung von schema.ini nur in Verbindung mit Textdateien (zB csv), Excel hat doch seine eigene Datentypbeschreibung (Zellenformatierung), die in der .xls mitgespeichert werden. Da Du den Jet - Treiber verwendest: Check out the [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel] located registry REG_DWORD "TypeGuessRows". That's the key to not letting Excel use only the first 8 rows to guess the columns data type. Set this value to 0 to scan all rows. This might hurt performance. Wenn bei Dir dieser Wert auf 8 steht und in den ersten 8 Reihen Deiner Datei nur Zahlen stehen, könnte Dein Problem damit begründet sein. Du musst den Wert in der Registry dann also auf 0 stellen. (Darauf musst dann auch achten wenn Du Deine Anwendung weitergibst) EDIT: Wenn Du IMEX verwendest werden alle Spalten als Text interpretiert. Ist natürlich auch eine Möglichkeit, dann musst Du allerdings alle weiteren Datentypen (bei Bedarf) selber casten. "IMEX=1;" tells the driver to always read "intermixed" (numbers, dates, strings etc) data columns as text. Note that this option might affect excel sheet write access negative. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Loewchen0507 Geschrieben 3. April 2007 Autor Teilen Geschrieben 3. April 2007 Super danke, ich glaub es nicht... Ihr seit echt super... IMEX hats gebracht... Das ALLE als String zurückgegeben werden ist nochnichtmal so schlimm, da ich hinterher SQLStatements schreiben die die Werte aus der Excel Tabelle in eine SQL Tabelle zurückschreiben... Ich danke nochmals, vor allem wegen der ausführlichen Beschreibung... Habe einiges wieder gelernt... Also ... danke, danke und nochmals danke... :uli LG Loewchen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.