Eu tenho:
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];
O que eu quero fazer é:
Suponha que atualmente column.DataType.Name seja "Double" . Eu quero que ele se torne "Int32" .
Como faço para conseguir isso?
c#
types
datacolumn
c#-datatable
rofans91
fonte
fonte
Embora seja verdade que você não pode alterar o tipo da coluna após o
DataTable
preenchimento, você pode alterá-lo após ligarFillSchema
, mas antes de ligarFill
. Por exemplo, digamos que a 3ª coluna é o que você deseja converterdouble
paraInt32
, você poderia usar:fonte
Oracle.MangedDataAccess.Client.OracleDataAdapter
com um procedimento armazenado. Está funcionando. Obrigado.Postagem antiga, mas pensei em pesar, com uma extensão DataTable que pode converter uma única coluna de cada vez, para um determinado tipo:
Ele pode então ser chamado assim:
Claro, usando qualquer tipo que você desejar, desde que cada valor na coluna possa realmente ser convertido para o novo tipo.
fonte
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);
Considere também alterar o tipo de retorno:
fonte
fonte
Eu fiz uma abordagem um pouco diferente. Eu precisava analisar um datetime de uma importação do Excel que estava no formato de data OA. Esta metodologia é simples o suficiente para construir a partir de ... em essência,
Exclua a coluna original e renomeie para a nova para corresponder à antiga
fonte
Depois que um
DataTable
for preenchido, você não poderá alterar o tipo de coluna.Sua melhor opção neste cenário é adicionar uma
Int32
coluna aoDataTable
antes de preenchê-lo:Em seguida, você pode clonar os dados de sua tabela original para a nova tabela:
Aqui está uma postagem com mais detalhes .
fonte
se você quiser alterar apenas uma coluna. por exemplo, de string para int32, você pode usar a propriedade Expression:
fonte
Criei uma função de extensão que permite alterar o tipo de coluna de um DataTable. Em vez de clonar a tabela inteira e importar todos os dados, ele apenas clona a coluna, analisa o valor e exclui o original.
Você pode usá-lo assim:
O código acima altera todas as colunas decimais para duplas.
fonte
fonte
Combinei a eficiência da solução de Mark - para não precisar de
.Clone
todo o DataTable - com genéricos e extensibilidade, para poder definir minha própria função de conversão . Isso é o que eu terminei:Dessa forma, o uso é muito mais simples, mas também personalizável:
fonte
Puedes agregar una columna con tipo de dato distinto, luego copiar los datos e eliminar la columna anterior
fonte