Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > .NET Framework > Forum > C# WinApp ms access รบกวนขอโค้ดในการเพิ่มข้อมูลทีละหลายๆพร้อมกันในคราวเดียวหน่อยครับ



 

C# WinApp ms access รบกวนขอโค้ดในการเพิ่มข้อมูลทีละหลายๆพร้อมกันในคราวเดียวหน่อยครับ

 



Topic : 136695



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook



ฐานข้อมูล เป็น ms access ครับ
อยากเพิ่มทีละหลายๆแถวครับ

ลองแบบนี้แล้ว
https://stackoverflow.com/questions/2972974/how-should-i-multiple-insert-multiple-records

Code (C#)
string connectionString = Properties.Settings.Default.wordConnectionString;
                             string insertQuery = "INSERT INTO Table1 (WordEng, _Void, WordTh) VALUES(@WordEng, @_Void, @WordTh)";
                             string sql = "";
                             int batchSize = 0;
                             using (System.Data.OleDb.OleDbConnection connection = new  System.Data.OleDb.OleDbConnection(connectionString))
                             {
                                 using (System.Data.OleDb.OleDbCommand command = new System.Data.OleDb.OleDbCommand(insertQuery, connection))
                                 {
                                     // define your parameters ONCE outside the loop, and use EXPLICIT typing
                                     command.Parameters.Add("@WordEng", System.Data.OleDb.OleDbType.LongVarWChar);
                                     command.Parameters.Add("@_Void", System.Data.OleDb.OleDbType.LongVarWChar);
                                     command.Parameters.Add("@WordTh", System.Data.OleDb.OleDbType.LongVarWChar);

                                     connection.Open();


                                     foreach (ExcelWorksheet worksheet in package.Workbook.Worksheets)
                                     {

                                         int colCount = worksheet.Dimension.End.Column;  //get Column Count
                                         int rowCount = worksheet.Dimension.End.Row;     //get row count

                                         for (int row = 1; row <= rowCount; row++)
                                         {


                                             if (!string.IsNullOrEmpty(worksheet.Cells[row, 1].Value?.ToString().Trim()))
                                             {
                                                 if (!worksheet.Cells[row, 1].Value.ToString().Trim().Contains(" "))
                                                 {
                                                     string cri = worksheet.Cells[row, 1].Value?.ToString().Trim().ToLower();
                                                     //this.toolStripStatusLabel1.Text = "check:" + cri;

                                                     if (!string.IsNullOrEmpty(cri) &&
                                                     !string.IsNullOrEmpty(worksheet.Cells[row, 2].Value?.ToString().Trim())
                                                     && !string.IsNullOrEmpty(worksheet.Cells[row, 3].Value?.ToString().Trim())
                                                     && !s.Contains(cri))
                                                     {
                                                         this.table1BindingSource.Filter = "WordEng = '" + cri + "'";
                                                         System.Threading.Thread.Sleep(1000);
                                                         if (string.IsNullOrEmpty(textBox1.Text))
                                                         {
                                                             i++;
                                                             /* table1TableAdapter.Insert(cri,
                                                                    worksheet.Cells[row, 2].Value?.ToString().Trim(),
                                                                    worksheet.Cells[row, 3].Value?.ToString().Trim());*

                                                             // now just SET the values
                                                             command.Parameters["@WordEng"].Value = cri;
                                                             command.Parameters["@_Void"].Value = worksheet.Cells[row, 2].Value?.ToString().Trim();
                                                             command.Parameters["@WordTh"].Value = worksheet.Cells[row, 2].Value?.ToString().Trim();
                                                             command.ExecuteNonQuery();
                                                             toolStripStatusLabel1.Text = "Add:" + cri;
                                                             s += "_" + worksheet.Cells[row, 1].Value?.ToString().Trim();
                                                         }

                                                     }


                                                 }

                                             }



                                         }
                                     }

                                     connection.Close();
                                 }




                             }


เหมือนจะยังช้าอยู่ 5000 กว่าแถวก็ใช้เวลาหลายนาทีกว่าจะเสร็จ ครับ
ไม่ทราบว่ามีวิธีที่เร็วกว่านี้ ไม๊ ครับ



Tag : .NET, Win (Windows App), C#







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2022-05-19 09:29:13 By : lamaka.tor View : 554 Reply : 9
 

 

No. 1



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook








แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-05-20 22:27:05 By : lamaka.tor
 


 

No. 2



โพสกระทู้ ( 9,586 )
บทความ ( 2 )



สถานะออฟไลน์


gen sql statement เป็นชุดๆ อาจจะชุดละ 1000 record คิวรี่ครั้งเดียว เพือลด การเชื่อมต่อ
ถ้าหน่วยความจำถีง อาจจะ 5000 record ไปเลยก็ได้
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-05-21 05:51:30 By : Chaidhanan
 

 

No. 3



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 2 เขียนโดย : Chaidhanan เมื่อวันที่ 2022-05-21 05:51:30
รายละเอียดของการตอบ ::
พอจะมีตัวอย่างไม๊ ครับ
ผมลองแบบนี้ แล้ว Error ครับ

Code (C#)
string connectionString = Properties.Settings.Default.wordConnectionString;
                           
                            StringBuilder sql = new StringBuilder("");
                            int batchSize = 0;
                            using (System.Data.OleDb.OleDbConnection connection = new System.Data.OleDb.OleDbConnection(connectionString))
                            {
                                 

                                    connection.Open();


                                    foreach (ExcelWorksheet worksheet in package.Workbook.Worksheets)
                                    {

                                        int colCount = worksheet.Dimension.End.Column;  //get Column Count
                                        int rowCount = worksheet.Dimension.End.Row;     //get row count

                                        for (int row = 1; row <= rowCount; row++)
                                        {


                                            if (!string.IsNullOrEmpty(worksheet.Cells[row, 1].Value?.ToString().Trim()))
                                            {
                                                if (!worksheet.Cells[row, 1].Value.ToString().Trim().Contains(" "))
                                                {
                                                    string cri = worksheet.Cells[row, 1].Value?.ToString().Trim().ToLower();
                                                    //this.toolStripStatusLabel1.Text = "check:" + cri;

                                                    if (!string.IsNullOrEmpty(cri) &&
                                                    !string.IsNullOrEmpty(worksheet.Cells[row, 2].Value?.ToString().Trim())
                                                    && !string.IsNullOrEmpty(worksheet.Cells[row, 3].Value?.ToString().Trim())
                                                    && !s.Contains(cri))
                                                    {
                                                        this.table1BindingSource.Filter = "WordEng = '" + cri + "'";
                                                       // System.Threading.Thread.Sleep(1000);
                                                        if (string.IsNullOrEmpty(textBox1.Text))
                                                        {
                                                            i++;

                                                            String r = String.Format($"'{cri}, {worksheet.Cells[row, 2].Value?.ToString().Trim()}, {worksheet.Cells[row, 2].Value?.ToString().Trim()})");
                                                            //Add the row to our running SQL batch
                                                            if (batchSize > 0)
                                                                sql.AppendLine(",");
                                                            sql.Append(r);
                                                            batchSize ++;
                                                            
                                                            toolStripStatusLabel1.Text = "Add:" + cri;
                                                            s += "_" + worksheet.Cells[row, 1].Value?.ToString().Trim();
                                                            if (batchSize >= 20)
                                                            {
                                                                String insertQuery = "INSERT INTO Table1 (WordEng, _Void, WordTh) VALUES" + "\r\n" +
                                                                             sql.ToString();
                                                            using (System.Data.OleDb.OleDbCommand command = new System.Data.OleDb.OleDbCommand(insertQuery,connection))
                                                            {
                                                                command.ExecuteNonQuery();
                                                                sql.Clear();
                                                                batchSize = 0;
                                                                
                                                            }

                                                        
                                                        }

                                                    }


                                                }

                                            }



                                        }
                                    }

                                    connection.Close();
                                }




                            }




1311
Code (SQL)
"INSERT INTO Table1 (WordEng, _Void, WordTh) VALUES\r\n(a.m., เอเอ็ม, เอเอ็ม),\r\n(abandon, อะแบ๊นดั้น, อะแบ๊นดั้น),\r\n(abdomen, แอบโด๊เม็น, แอบโด๊เม็น),\r\n(ability, อะบิ๊ลิตี้, อะบิ๊ลิตี้),\r\n(ablaze, อะแบล๊ซฺ, อะแบล๊ซฺ),\r\n(able, เอ๊เบิ้ล, เอ๊เบิ้ล),\r\n(abnormal, แอบน๊อร์มอล, แอบน๊อร์มอล),\r\n(abolish, อะโบ๊ลิช, อะโบ๊ลิช),\r\n(about, อะเบ๊าท, อะเบ๊าท),\r\n(above, อะโบ๊ฝ, อะโบ๊ฝ),\r\n(abroad, อะบร๊อด, อะบร๊อด),\r\n(absent, แอ๊บเซ่นท, แอ๊บเซ่นท),\r\n(absolute, แอ๊บโซลู้ท, แอ๊บโซลู้ท),\r\n(absorb, แอ๊บซ๊อร์บ, แอ๊บซ๊อร์บ),\r\n(abstract, แอ๊บสแทรคทฺ, แอ๊บสแทรคทฺ),\r\n(absurd, แอ๊บเซิร์ท, แอ๊บเซิร์ท),\r\n(abundant, อะบั๊นแด้นท, อะบั๊นแด้นท),\r\n(academy, อะคาเด๊มี่, อะคาเด๊มี่),\r\n(accelerate, แอ๊คเซ้ลเลอเรท, แอ๊คเซ้ลเลอเรท),\r\n(accept, แอ๊คเซพท, แอ๊คเซพท)"


พอตัด \r\n ออกก็ติด ;

1312
Code (SQL)
"INSERT INTO Table1 (WordEng, _Void, WordTh) VALUES('a.m.', 'เอเอ็ม', 'เอเอ็ม'),('abandon', 'อะแบ๊นดั้น', 'อะแบ๊นดั้น'),('abdomen', 'แอบโด๊เม็น', 'แอบโด๊เม็น'),('ability', 'อะบิ๊ลิตี้', 'อะบิ๊ลิตี้'),('ablaze', 'อะแบล๊ซฺ', 'อะแบล๊ซฺ'),('able', 'เอ๊เบิ้ล', 'เอ๊เบิ้ล'),('abnormal', 'แอบน๊อร์มอล', 'แอบน๊อร์มอล'),('abolish', 'อะโบ๊ลิช', 'อะโบ๊ลิช'),('about', 'อะเบ๊าท', 'อะเบ๊าท'),('above', 'อะโบ๊ฝ', 'อะโบ๊ฝ'),('abroad', 'อะบร๊อด', 'อะบร๊อด'),('absent', 'แอ๊บเซ่นท', 'แอ๊บเซ่นท'),('absolute', 'แอ๊บโซลู้ท', 'แอ๊บโซลู้ท'),('absorb', 'แอ๊บซ๊อร์บ', 'แอ๊บซ๊อร์บ'),('abstract', 'แอ๊บสแทรคทฺ', 'แอ๊บสแทรคทฺ'),('absurd', 'แอ๊บเซิร์ท', 'แอ๊บเซิร์ท'),('abundant', 'อะบั๊นแด้นท', 'อะบั๊นแด้นท'),('academy', 'อะคาเด๊มี่', 'อะคาเด๊มี่'),('accelerate', 'แอ๊คเซ้ลเลอเรท', 'แอ๊คเซ้ลเลอเรท'),('accept', 'แอ๊คเซพท', 'แอ๊คเซพท')"


ผมเลยใส่ ; เข้าไป ก็ติดอีกครับ
1313
Code (SQL)
"INSERT INTO Table1 (WordEng, _Void, WordTh) VALUES(a.m.,เอเอ็ม,เอเอ็ม),(abandon,อะแบ๊นดั้น,อะแบ๊นดั้น),(abdomen,แอบโด๊เม็น,แอบโด๊เม็น),(ability,อะบิ๊ลิตี้,อะบิ๊ลิตี้),(ablaze,อะแบล๊ซฺ,อะแบล๊ซฺ),(able,เอ๊เบิ้ล,เอ๊เบิ้ล),(abnormal,แอบน๊อร์มอล,แอบน๊อร์มอล),(abolish,อะโบ๊ลิช,อะโบ๊ลิช),(about,อะเบ๊าท,อะเบ๊าท),(above,อะโบ๊ฝ,อะโบ๊ฝ),(abroad,อะบร๊อด,อะบร๊อด),(absent,แอ๊บเซ่นท,แอ๊บเซ่นท),(absolute,แอ๊บโซลู้ท,แอ๊บโซลู้ท),(absorb,แอ๊บซ๊อร์บ,แอ๊บซ๊อร์บ),(abstract,แอ๊บสแทรคทฺ,แอ๊บสแทรคทฺ),(absurd,แอ๊บเซิร์ท,แอ๊บเซิร์ท),(abundant,อะบั๊นแด้นท,อะบั๊นแด้นท),(academy,อะคาเด๊มี่,อะคาเด๊มี่),(accelerate,แอ๊คเซ้ลเลอเรท,แอ๊คเซ้ลเลอเรท),(accept,แอ๊คเซพท,แอ๊คเซพท);"

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-05-21 07:44:44 By : lamaka.tor
 


 
escape string หรือใช้ parameters ก็ได้แล้ว

https://docs.microsoft.com/en-us/dotnet/api/system.data.oledb.oledbcommand.parameters?redirectedfrom=MSDN&view=dotnet-plat-ext-6.0#System_Data_OleDb_OleDbCommand_Parameters
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-05-21 10:09:37 By : 009
 


 

No. 5



โพสกระทู้ ( 9,586 )
บทความ ( 2 )



สถานะออฟไลน์


ตามคห 6 ครับ ,มันขาด quote หรือ [ ] ครอบ text ผมจำไม่ได้แล้วว่าใช้ อะไร มาตรฐาน คือ quote

Code (SQL)
INSERT INTO Table1 (WordEng, _Void, WordTh) VALUES
('a.m.', 'เอเอ็ม', 'เอเอ็ม'),
('abandon', 'อะแบ๊นดั้น', 'อะแบ๊นดั้น'),
('abdomen', 'แอบโด๊เม็น', 'แอบโด๊เม็น'),
('ability', 'อะบิ๊ลิตี้', 'อะบิ๊ลิตี้'),
... ,
('accept', 'แอ๊คเซพท', 'แอ๊คเซพท');



ประวัติการแก้ไข
2022-05-21 10:55:26
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-05-21 10:51:30 By : Chaidhanan
 


 

No. 6



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 4 เขียนโดย : 009 เมื่อวันที่ 2022-05-21 10:09:37
รายละเอียดของการตอบ ::
จากตัวอย่าง ไม่ทราบว่า มันจะเอาไป Execute ตอนไหน ครับ หรือโค้ดนี้คือการเพิ่มเข้า ฐานข้อมูลไปแล้วครับ


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-05-21 15:07:20 By : lamaka.tor
 


 

No. 7



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 5 เขียนโดย : Chaidhanan เมื่อวันที่ 2022-05-21 10:51:30
รายละเอียดของการตอบ ::

Error เช่นเดิม ครับ

5

Code (SQL)
"INSERT INTO Table1 (WordEng, _Void, WordTh) VALUES('a.m.','เอเอ็ม','เอเอ็ม'),('abandon','อะแบ๊นดั้น','อะแบ๊นดั้น'),('abdomen','แอบโด๊เม็น','แอบโด๊เม็น'),('ability','อะบิ๊ลิตี้','อะบิ๊ลิตี้'),('ablaze','อะแบล๊ซฺ','อะแบล๊ซฺ'),('able','เอ๊เบิ้ล','เอ๊เบิ้ล'),('abnormal','แอบน๊อร์มอล','แอบน๊อร์มอล'),('abolish','อะโบ๊ลิช','อะโบ๊ลิช'),('about','อะเบ๊าท','อะเบ๊าท'),('above','อะโบ๊ฝ','อะโบ๊ฝ'),('abroad','อะบร๊อด','อะบร๊อด'),('absent','แอ๊บเซ่นท','แอ๊บเซ่นท'),('absolute','แอ๊บโซลู้ท','แอ๊บโซลู้ท'),('absorb','แอ๊บซ๊อร์บ','แอ๊บซ๊อร์บ'),('abstract','แอ๊บสแทรคทฺ','แอ๊บสแทรคทฺ'),('absurd','แอ๊บเซิร์ท','แอ๊บเซิร์ท'),('abundant','อะบั๊นแด้นท','อะบั๊นแด้นท'),('academy','อะคาเด๊มี่','อะคาเด๊มี่'),('accelerate','แอ๊คเซ้ลเลอเรท','แอ๊คเซ้ลเลอเรท'),('accept','แอ๊คเซพท','แอ๊คเซพท');"


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-05-21 15:17:20 By : lamaka.tor
 


 
SELECT * FROM Customers WHERE CustomerID = ?
แบบนี้คือ parameter (ฝั่ง PHP เรียก prepare statement)
ประโยชน์ คือ มันจะทำ escape string ให้ และเป็นการป้องกัน SQL injection
การนำไปใช้ก็จัดใส่ sql statement แต่โค้ดที่นำมาแสดงเป็น dynamic statement ก็ไปต่อ string ดุูครับ

ในโค้ด คือ ตัวแปร sql





แต่ถ้าจะเขียน statement ให้มีการ escape ตรงๆ ก็ใส่ double quotes x 2
ไม่ใช่ single quotes
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-05-21 19:33:28 By : 009
 


 

No. 9



โพสกระทู้ ( 9,586 )
บทความ ( 2 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 7 เขียนโดย : lamaka.tor เมื่อวันที่ 2022-05-21 15:17:20
รายละเอียดของการตอบ ::
https://stackoverflow.com/questions/2972974/how-should-i-multiple-insert-multiple-records
https://www.aspsnippets.com/questions/370928/Inserting-multiple-rows-in-a-single-SQL-query-using-C-Net/


ลองดูครับ


ประวัติการแก้ไข
2022-05-21 20:24:09
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-05-21 20:23:11 By : Chaidhanan
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : C# WinApp ms access รบกวนขอโค้ดในการเพิ่มข้อมูลทีละหลายๆพร้อมกันในคราวเดียวหน่อยครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 01
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่