โค้ด: เลือกทั้งหมด
using Oracle.DataAccess.Client;
public void BulkTboCustomer(DataTable dtSource)
{
using (OracleConnection conn = new OracleConnection("DATA SOURCE=10.0.0.1:1521/CUSTOMER;PASSWORD=password;PERSIST SECURITY INFO=True;USER ID=user01;Enlist=True;"))
{
try
{
conn.Open();
using (var bulkCopy = new OracleBulkCopy(conn, OracleBulkCopyOptions.UseInternalTransaction))
{
bulkCopy.BulkCopyTimeout = 300; //หน่วยเป็นวินาที
//insert คราวละ 500 rows ถ้ามี 10,000 ก็แบ่งทำทีละ 500 จนครบจำนวน OracleBulkCopy มันจะแบ่งทำให้เอง
bulkCopy.BatchSize = 500;
//ชื่อตารางใน DB ที่จะ insert ข้อมูลเข้าไป
bulkCopy.DestinationTableName = "CUST.TB_O_CUSTOMER_INFO";
//mapping data ต้นทางใช้ ID , ลงปลายทางที่ตาราง TB_O_CUSTOMER_INFO.CUST_ID
bulkCopy.ColumnMappings.Add("ID", "CUST_ID");
bulkCopy.ColumnMappings.Add("NAME_TH", "FIRST_NAME_TH");
bulkCopy.ColumnMappings.Add("BIRTH_DATE", "DATE_OF_BIRTH");
bulkCopy.ColumnMappings.Add("SALARY", "SALARY");
bulkCopy.WriteToServer(dtSource);
}
}
catch (Exception ex)
{
}
}
}
dtSource.ID ชนิด DataType เป็น Decimal <=> TB_O_CUSTOMER_INFO.CUST_ID ชนิดเป็น Number
dtSource.BIRTH_DATE ชนิด DataType เป็น DateTime <=> TB_O_CUSTOMER_INFO.DATE_OF_BIRTH ชนิดเป็น Date
ถ้าชนิดคอลัมน์ไม่ตรง จะพบ exception ตอน .WriteToServer ครับ
ตัวอย่างวิธีการแปลงข้อมูล ใน DataTable จาก text ให้เป็น DateTime
// ex=>15/11/2016 14:37:43
DateTime dateVal;
string concat = string.Format("{0}/{1}/{2} {3}", value.Split('/')[0], value.Split('/')[1], (value.Split('/')[2]).Split(' ')[0], (value.Split('/')[2]).Split(' ')[1]);
DateTime.TryParseExact(concat, new string[] { "dd/MM/yyyy HH:mm:ss" }, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out dateVal);