Ich habe:
DataTable Table = new DataTable;
SqlConnection = new System.Data.SqlClient.SqlConnection("Data Source=" + ServerName + ";Initial Catalog=" + DatabaseName + ";Integrated Security=SSPI; Connect Timeout=120");
SqlDataAdapter adapter = new SqlDataAdapter("Select * from " + TableName, Connection);
adapter.FillSchema(Table, SchemaType.Source);
adapter.Fill(Table);
DataColumn column = DataTable.Columns[0];
Was ich tun möchte ist:
Angenommen, derzeit column.DataType.Name ist "Double" . Ich möchte, dass es "Int32" wird .
Wie erreiche ich das?
c#
types
datacolumn
c#-datatable
rofans91
quelle
quelle
Es ist zwar richtig, dass Sie den Typ der Spalte nach dem
DataTable
Ausfüllen nicht ändern könnenFillSchema
, aber Sie können ihn nach dem Aufruf , aber vor dem Aufruf ändernFill
. Zum Beispiel, sagen die dritte Spalte ist , die Sie von konvertieren möchtendouble
zuInt32
, könnten Sie verwenden:quelle
Oracle.MangedDataAccess.Client.OracleDataAdapter
mit einer gespeicherten Prozedur getestet . Es funktioniert. Vielen Dank.Alter Beitrag, aber ich dachte, ich würde mit einer DataTable-Erweiterung, die jeweils eine einzelne Spalte konvertieren kann, in einen bestimmten Typ abwägen:
Es kann dann so genannt werden:
Natürlich mit jedem gewünschten Typ, solange jeder Wert in der Spalte tatsächlich in den neuen Typ konvertiert werden kann.
quelle
public static void ConvertColumnType<T>(this DataTable dt, string columnName, TnewType) where T : Type, IConvertible
dr[dc.ColumnName] = dr[columnName] == DBNull.Value ? DBNull.Value : Convert.ChangeType(dr[columnName], newType);
Ändern Sie auch den Rückgabetyp:
quelle
quelle
Ich habe einen etwas anderen Ansatz gewählt. Ich musste eine Datums- / Uhrzeitangabe aus einem Excel-Import im OA-Datumsformat analysieren. Diese Methode ist einfach genug, um aus ... im Wesentlichen
Löschen Sie die ursprüngliche Spalte und benennen Sie sie in die neue um, um sie an die alte anzupassen
quelle
Sobald a
DataTable
ausgefüllt wurde, können Sie den Typ einer Spalte nicht mehr ändern.In diesem Szenario können Sie am besten eine
Int32
Spalte hinzufügen ,DataTable
bevor Sie sie ausfüllen:Anschließend können Sie die Daten aus Ihrer ursprünglichen Tabelle in die neue Tabelle klonen:
Hier ist ein Beitrag mit mehr Details .
quelle
Wenn Sie nur eine Spalte ändern möchten, können Sie beispielsweise die Expression-Eigenschaft verwenden:
quelle
Ich habe eine Erweiterungsfunktion erstellt, mit der der Spaltentyp einer DataTable geändert werden kann. Anstatt die gesamte Tabelle zu klonen und alle Daten zu importieren, wird nur die Spalte geklont, der Wert analysiert und dann das Original gelöscht.
Sie können es so verwenden:
Der obige Code ändert alle Dezimalspalten in Doppel.
quelle
quelle
Ich habe die Effizienz von Marks Lösung - damit ich nicht
.Clone
die gesamte DataTable verwenden muss - mit Generika und Erweiterbarkeit kombiniert , damit ich meine eigene Konvertierungsfunktion definieren kann . Das ist, was ich am Ende hatte:Auf diese Weise ist die Verwendung viel einfacher und gleichzeitig anpassbar:
quelle
Puedes stimmt mit einer Kolumna überein, die sich mit der Frage befasst, wie man die Kolumna anterior eliminiert
quelle