У меня есть:
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];
Что я хочу сделать:
Предположим, что в настоящее время column.DataType.Name имеет значение «Double» . Я хочу, чтобы он стал «Int32» .
Как мне этого добиться?
c#
types
datacolumn
c#-datatable
rofans91
источник
источник
Хотя верно, что вы не можете изменить тип столбца после
DataTable
заполнения, вы можете изменить его после вызоваFillSchema
, но перед вызовомFill
. Например, скажем, третий столбец, который вы хотите конвертироватьdouble
вInt32
, вы можете использовать:источник
Oracle.MangedDataAccess.Client.OracleDataAdapter
с помощью хранимой процедуры. Это работает. Спасибо.Старый пост, но я подумал, что взвесу, с расширением DataTable, которое может преобразовывать один столбец за раз в заданный тип:
Затем его можно назвать так:
Конечно, используя любой желаемый тип, если каждое значение в столбце действительно может быть преобразовано в новый тип.
источник
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);
Также подумайте об изменении типа возвращаемого значения:
источник
источник
Я использовал немного другой подход. Мне нужно было разобрать дату и время из импорта Excel, который был в формате даты OA. Эта методология достаточно проста для построения из ... по сути,
Удалите исходный столбец и переименуйте его в новый, чтобы он соответствовал старому
источник
После
DataTable
заполнения вы не можете изменить тип столбца.Лучший вариант в этом сценарии - добавить
Int32
столбец в столбецDataTable
перед его заполнением:Затем вы можете клонировать данные из исходной таблицы в новую таблицу:
Вот сообщение с более подробной информацией .
источник
если вы хотите изменить только столбец. например, со строки на int32, вы можете использовать свойство Expression:
источник
Я создал функцию расширения, которая позволяет изменять тип столбца DataTable. Вместо клонирования всей таблицы и импорта всех данных он просто клонирует столбец, анализирует значение и затем удаляет оригинал.
Вы можете использовать это так:
Приведенный выше код изменяет все десятичные столбцы на удваиваемые.
источник
источник
Я объединил эффективность решения Марка - так что мне не
.Clone
нужен весь DataTable - с универсальными шаблонами и расширяемостью, поэтому я могу определить свою собственную функцию преобразования . Вот что у меня получилось:Таким образом, использование становится более простым, но при этом настраиваемым:
источник
Пуэдес аргар уна колумна кон типо де дато особняк, луэго копиар лос датос и элиминар ла колумна передний
источник