c# insert ข้อมูลที่ละมากๆ โดยไม่ใช้การ insert into

แนะนำ สอบถาม ภาษา C สำหรับผู้เริ่มต้น ภาษา Java ภาษา Python

Moderator: mindphp, ผู้ดูแลกระดาน

ภาพประจำตัวสมาชิก
jataz2
PHP Hero Member
PHP Hero Member
โพสต์: 169
ลงทะเบียนเมื่อ: 22/02/2011 11:48 am
ติดต่อ:

c# insert ข้อมูลที่ละมากๆ โดยไม่ใช้การ insert into

โพสต์โดย jataz2 » 25/11/2016 4:20 pm

โค้ด: เลือกทั้งหมด

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)
                    {
                    }
                }
}


ข้อควรระวังคือ ชนิด DataType ใน DataTable ต้องตรงกับชนิดคอลัมน์ใน Table ของ Oracle
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);

ย้อนกลับไปยัง

ผู้ใช้งานขณะนี้

กำลังดูบอร์ดนี้: 1 และ บุคคลทั่วไป 0 ท่าน