Saya sudah:
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];
Yang ingin saya lakukan adalah:
Asumsikan saat ini kolom.DataType.Name adalah "Double" . Saya ingin ini menjadi "Int32" .
Bagaimana saya mencapai ini?
c#
types
datacolumn
c#-datatable
rofans91
sumber
sumber
Meskipun benar bahwa Anda tidak bisa mengubah tipe kolom setelah
DataTable
diisi, Anda bisa mengubahnya setelah Anda meneleponFillSchema
, tapi sebelum Anda meneleponFill
. Misalnya, kolom ke-3 adalah kolom yang ingin Anda ubahdouble
menjadiInt32
, Anda dapat menggunakan:sumber
Oracle.MangedDataAccess.Client.OracleDataAdapter
dengan prosedur tersimpan. Bekerja. Terima kasih.Posting lama, tapi saya pikir saya akan mempertimbangkannya, dengan ekstensi DataTable yang dapat mengonversi satu kolom pada satu waktu, ke jenis tertentu:
Kemudian bisa disebut seperti ini:
Tentu saja menggunakan tipe apa pun yang Anda inginkan, asalkan setiap nilai di kolom benar-benar dapat dikonversi ke tipe baru.
sumber
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);
Pertimbangkan juga untuk mengubah tipe pengembalian:
sumber
sumber
Saya telah mengambil sedikit pendekatan yang berbeda. Saya perlu mengurai datetime dari impor excel yang ada dalam format tanggal OA. Metodologi ini cukup sederhana untuk dibangun dari ... pada dasarnya,
Hapus kolom asli dan ganti namanya ke yang baru agar sesuai dengan yang lama
sumber
Setelah a
DataTable
diisi, Anda tidak dapat mengubah tipe kolom.Pilihan terbaik Anda dalam skenario ini adalah menambahkan
Int32
kolom keDataTable
sebelum mengisinya:Kemudian Anda dapat mengkloning data dari tabel asli Anda ke tabel baru:
Berikut postingan dengan detail lebih lanjut .
sumber
jika Anda ingin mengubah hanya kolom. misalnya dari string ke int32 Anda dapat menggunakan properti Expression:
sumber
Saya membuat fungsi ekstensi yang memungkinkan mengubah jenis kolom DataTable. Alih-alih mengkloning seluruh tabel dan mengimpor semua data, itu hanya mengkloning kolom, mengurai nilai dan kemudian menghapus aslinya.
Anda dapat menggunakannya seperti ini:
Kode di atas mengubah semua kolom desimal menjadi dua kali lipat.
sumber
sumber
Saya menggabungkan efisiensi solusi Mark - jadi saya tidak harus ke
.Clone
seluruh DataTable - dengan generik dan ekstensibilitas, jadi saya dapat menentukan fungsi konversi saya sendiri . Inilah yang akhirnya saya dapatkan:Dengan cara ini, penggunaan jauh lebih mudah, sekaligus dapat disesuaikan:
sumber
Puedes agregar una columna con tipo de dato distinto, luego copiar los datos y eliminar la columna anterior
sumber