|
|
|
C# WinApp ms access รบกวนขอโค้ดในการเพิ่มข้อมูลทีละหลายๆพร้อมกันในคราวเดียวหน่อยครับ |
|
|
|
|
|
|
|
ฐานข้อมูล เป็น 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#
|
|
|
|
|
|
Date :
2022-05-19 09:29:13 |
By :
lamaka.tor |
View :
554 |
Reply :
9 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Date :
2022-05-20 22:27:05 |
By :
lamaka.tor |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gen sql statement เป็นชุดๆ อาจจะชุดละ 1000 record คิวรี่ครั้งเดียว เพือลด การเชื่อมต่อ
ถ้าหน่วยความจำถีง อาจจะ 5000 record ไปเลยก็ได้
|
|
|
|
|
Date :
2022-05-21 05:51:30 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอบความคิดเห็นที่ : 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();
}
}
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 ออกก็ติด ;
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', 'แอ๊คเซพท', 'แอ๊คเซพท')"
ผมเลยใส่ ; เข้าไป ก็ติดอีกครับ
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตามคห 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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอบความคิดเห็นที่ : 5 เขียนโดย : Chaidhanan เมื่อวันที่ 2022-05-21 10:51:30
รายละเอียดของการตอบ ::
Error เช่นเดิม ครับ
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 01
|