PDA

View Full Version : سوال: زمان طولانی هنگام وارد کردن داده به SQL (چطوری سرعت Insert رو افزایش بدم؟)



jafarpalideh
چهارشنبه 19 مهر 1396, 08:04 صبح
با سلام .
من یه حلقه ی For دارم که میاد و Insert رو انجام میده . به توصیه یکی از دوستان کانکشن رو بیرون حلقه باز و بسته کردم . ولی بازم هنگام وارد کردن داده به ازای 1500 بار اجرای حلقه 20 ثانیه طول میکشه!!!!! راه حل بهتری وجود داره ؟

کد ها رو میزارم .





/////////////////تبدیل تاریخ میلادی به شمسی////////////////


public string MiladiToShamsi(DateTime _date)
{
PersianCalendar pc = new PersianCalendar();
StringBuilder sb = new StringBuilder();
sb.Append(pc.GetYear(_date).ToString("0000"));
sb.Append("/");
sb.Append(pc.GetMonth(_date).ToString("00"));
sb.Append("/");
sb.Append(pc.GetDayOfMonth(_date).ToString("00"));
return sb.ToString();




}
//////////////////گرفتن تاریخ شروع و پایان////////////////////


string PreventiveId = dataGridView1.CurrentRow.Cells["PreventiveId"].Value.ToString();
int period = Convert.ToInt32(dataGridView1.CurrentRow.Cells["PeriodDay"].Value.ToString());
string startDate =shamsitomiladi( txtDateBegin.Text);
string endDate =shamsitomiladi( txtDateEnd.Text);
DateTime dtStart = DateTime.Parse(startDate);
DateTime dtEnd = DateTime.Parse(endDate);
PersianCalendar pc = new PersianCalendar();
sconnection = new SqlConnection();
sconnection.ConnectionString = PM.Properties.Settings.Default.ConPM;
if (sconnection.State == ConnectionState.Closed)
{
sconnection.Open();
}
for (DateTime nextdate = dtStart; nextdate <= dtEnd; nextdate = pc.AddDays(nextdate, period))
{
string Insert2 = "Insert into TblPreventiveDay values ('{0}','{1}','{2}','{3}')";
string shamsi = MiladiToShamsi(nextdate);
Insert2 = string.Format(Insert2, PreventiveId, shamsi, 0, 0);
Function.DoDml2(Insert2, sconnection);
}
sconnection.Close();
MessageBox.Show("پیشگیرانه طی دوره روزانه ایجاد شد");


////////////////////////////////////////////////////////


public static void DoDml2(string Query,SqlConnection con)
{
SqlCommand cmd = new SqlCommand(Query, con);
cmd.ExecuteNonQuery();


}

Moien Tajik
چهارشنبه 19 مهر 1396, 10:32 صبح
برای Insert کردن چند رکورد باهم از Bulk Insert استفاده کنید : http://www.c-sharpcorner.com/blogs/insert-bulk-row-at-a-time-in-sql-table-from-c-sharp-code1
اگر از ORM هایی مثل EF و یا Dapper هم استفاده میکنید میتونید از ZZZProject (http://www.zzzprojects.com/) استفاده کنید که سرعت Bulk Insert بسیار خوبی داره .

mz6488
پنج شنبه 20 مهر 1396, 11:04 صبح
insert into table (col1,col2,...) values (a1,a2,..),(b1,b2,...),...