Laden...

Verbotene Sonderzeichen bei Jet.OLEDB.4.

Erstellt von aldababsack vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.724 Views
A
aldababsack Themenstarter:in
26 Beiträge seit 2006
vor 15 Jahren
Verbotene Sonderzeichen bei Jet.OLEDB.4.

verwendetes Datenbanksystem: <Data Table - Excel>

Hallo Forum

Ich habe nach der Anleitung von Rainbird Excel: DataTable mittels OLEDB in Excel-Dokument exportieren
ein Data table -> Excel exporter gebastelt.

Die neue Variante
Excel-Export ohne Excel (Snippet)
geht nicht, da maximal Excel 2000 verwendet wird.

Nun Haben meine Collums "bescheuerte Namen" mit Hochkomas, * , _ , __ , : ,
Mit "Try and Error" habe ich jetzt alle Sonderzeichen auf die ich gestoßen bin "entschärft"

Gibt es irgendwo eine liste der "verbotenen" Sonderzeichen??
..Damit in der Zukunft kein neuer Columnname mir mein Programm zum absturz bringt...

Oder ist einfach alles, was "nicht ASCI" ist verboten.

danke

Aldababsack

M
53 Beiträge seit 2006
vor 15 Jahren

Hi,
geh doch andersrum an das Thema. Such nicht nach allen Sonderzeichen sondern nur nach deines Wissens "gültigen" Zeichen. Mit [Feldname] kann man sogar Leerzeichen im Feldnamen haben. Siehe dazu : http://www.c-sharpcorner.com/UploadFile/prasad_1/RegExpPSD12062005021717AM/RegExpPSD.aspx
Ansonsten gilt : Sie müssen eindeutig sein und dürfen bis zu 64 Zeichen lang sein. Nicht erlaubt sind Punkte, Ausrufungszeichen oder eckige Klammern. Außerdem dürfen Feldnamen nicht mit einem Leerzeichen beginnen.
Gruss
Markus

A
aldababsack Themenstarter:in
26 Beiträge seit 2006
vor 15 Jahren

Danke für den Tip. 👍
Die Columns in C# haben bei mir alle möglicheen Sonderzeichen, und C# kann damit sehr gut umgehen..

Hast Ja im Prinzip recht.
Nur würde ich gerne trotzdem wissen, was erlaubt ist..
😁

oder mal anders herum.

Wenn der Column name das Problem ist warum eigentlich nicht Columm Nummer verwenden?

 
          
            // INSERT SQL-Anweisung für Excel erzeugen            
            StringBuilder builder = new StringBuilder("INSERT INTO [");            
            builder.Append(table.TableName);           
            builder.Append("$] (");            
            
            // Alle Spalten durchlaufen            
            for (int i = 0; i < columnCount; i++)            
            {                
                // Spaltennamen anfügen
                string colnam = table.Columns[i].ColumnName;   //----> Hier die Columnnummer verwenden?!
                
                // fehlerbehandlung bei exotischen Column namen 
                //  colnam = colnam.Replace 
                
                
                builder.Append(colnam);                
                
                // Parameter anfügen                
                parameterBuilder.Append("?");                
                
                // Wenn eine weitere Spalte folgt ...                
                if (i < (columnCount - 1))               
                {                    
                    // Kommas anfügen                    
                    builder.Append(",");                   
                    parameterBuilder.Append(",");                
                }            
            } 
            // SQL-Anweisung fertigstellen  
            builder.Append(parameterBuilder.ToString()); 
            builder.Append(")");
            
            string insertStatement = builder.ToString();   
            
            // alle werte durchlaufen          
            foreach (DataRow row in table.Rows)            
            {
                // Neuen OLEDB-Befehl erzeugen                
                OleDbCommand command = new OleDbCommand(insertStatement, connection);
               
                // Alle Spalten durchlaufen                
                foreach(DataColumn column in table.Columns)                
                {

                    string exwert = row[column].ToString();

                    // Parameter übergeben
                    command.Parameters.Add(new OleDbParameter(column.ColumnName ,exwert ));   //----> Hier die Columnnummer verwenden?!

                        
                  }
               


                command.CommandTimeout = 300;
                // Befehl ausführen
                command.ExecuteNonQuery();
            }   


Un-Entschärft sieht der command so aus.



NSERT INTO [XXXXX139030788$] (TimeStamp*hh:mm,Anfahr-Cnt*,Anlagenname*,E-heute*kWh,Error*,E-Total*kWh,ExtGloIrr*W/m^2,ExtSolIrr*W/m^2,Fac*Hz,FI-Code*,FI-Status*,h-On*h,h-Total*h,Iac*A,I-GFDI*A,Ipv*A,Komm.FehlerSMU*,Messdaten*Zyklen,MittelwertGrp1*mA,MittelwertGrp2*mA,MittelwertGrp3*mA,Mode*,MppSuchTag-Cnt*,Pac*kW,PB_DigInput1*,PB_DigInput2*,PB_DigInput3*,PB_DigInput4*,PB_DigInput5*,PB_DigInput6*,PB_DigInput7*,PB_DigInput8*,Ppv*kW,Reg.SMUs*SMUs,R-Insul*kOhm,SerialNumber*,SMUWarncode*,SMUWarnung*,Stoer.-Cnt*,Tagesenergie*Tage,Team-Status*,Temp.Kk*?C,TmpExtC*?C,TmpIntC*?C,TStartRestzeit*s,TWarteRestzeit*s,Upv*V,Upv0*V,VacL1*V,VacL2*V,VacL3*V,Warn.-Cnt*) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)

Wie ihr sieht, sind da so ziemlich alle Zeichen drinn, die eine Tastatur hergibt..
Wegen der nachhaltigkeit sollten auch die Columns in der Excel Tabelle gleiche Namen tragen.
Und dafür brauche ich Aber ne idee, wie ich die Column Namen auch nach excel rüberzaubern kann.

Irgendwelche ideen?

Danke
Aldababsack