J'ai:
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];
Ce que je veux faire, c'est:
Supposons qu'actuellement, column.DataType.Name est "Double" . Je veux qu'il devienne "Int32" .
Comment y parvenir?
c#
types
datacolumn
c#-datatable
rofans91
la source
la source
S'il est vrai que vous ne pouvez pas changer le type de colonne une fois que le
DataTable
est rempli, vous pouvez le changer après l'appelFillSchema
, mais avant l'appelFill
. Par exemple, supposons que la 3ème colonne est celui que vous voulez convertirdouble
àInt32
, vous pouvez utiliser:la source
Oracle.MangedDataAccess.Client.OracleDataAdapter
avec une procédure stockée. Ça marche. Merci.Ancien article, mais je pensais que je peserais, avec une extension DataTable qui peut convertir une seule colonne à la fois, en un type donné:
Il peut alors être appelé comme ceci:
Bien sûr, en utilisant le type de votre choix, à condition que chaque valeur de la colonne puisse être convertie dans le nouveau type.
la source
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);
Pensez également à modifier le type de retour:
la source
la source
J'ai adopté une approche un peu différente. J'avais besoin d'analyser une date / heure à partir d'une importation Excel qui était au format de date OA. Cette méthodologie est assez simple pour construire à partir de ...
Supprimer la colonne d'origine et renommer la nouvelle pour correspondre à l'ancienne
la source
Une fois
DataTable
a rempli, vous ne pouvez pas changer le type d'une colonne.Votre meilleure option dans ce scénario est d'ajouter une
Int32
colonne à laDataTable
avant de la remplir:Ensuite, vous pouvez cloner les données de votre table d'origine vers la nouvelle table:
Voici un article avec plus de détails .
la source
si vous souhaitez modifier uniquement une colonne, par exemple de string en int32, vous pouvez utiliser la propriété Expression:
la source
J'ai créé une fonction d'extension qui permet de changer le type de colonne d'un DataTable. Au lieu de cloner la table entière et d'importer toutes les données, il clone simplement la colonne, analyse la valeur puis supprime l'original.
Vous pouvez l'utiliser comme ceci:
Le code ci-dessus change toutes les colonnes décimales en doubles.
la source
la source
J'ai combiné l'efficacité de la solution de Mark - donc je n'ai pas besoin de
.Clone
la totalité du DataTable - avec les génériques et l'extensibilité, pour que je puisse définir ma propre fonction de conversion . C'est ce avec quoi j'ai fini:De cette façon, l'utilisation est beaucoup plus simple, tout en étant également personnalisable:
la source
Puedes agregar una columna con tipo de dato distinto, luego copiar los datos y elimar la columna anterior
la source