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
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
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