의 시간이 너무 오래 걸리는 것은이 (1000, 나는 주변에 8000 기록과 (항목)이내 코드가 실행
private void button1_Click(object sender, EventArgs e)
{
double prate = 0;
double srate = 0;
double rate = 0;
double qty = 0;
double val = 0; bool b = false;
List<string> item = new List<string>();
List<string> brand = new List<string>();
List<string> station = new List<string>();
List<string> dealer = new List<string>();
int m1=0, m2=0;
for (int k = 0; k < treeView1.Nodes.Count; k++)
{
for (int l = 0; l < treeView1.Nodes[k].Nodes.Count; l++)
{
if (treeView1.Nodes[k].Nodes[l].Checked == true)
{
brand.Add(treeView1.Nodes[k].Tag.ToString());
item.Add(treeView1.Nodes[k].Nodes[l].Tag.ToString());
m1++;
}
}
}
for (int i = 0; i < treeView2.Nodes.Count; i++)
{
for (int j = 0; j < treeView2.Nodes[i].Nodes.Count; j++)
{
if (treeView2.Nodes[i].Nodes[j].Checked == true)
{
station.Add(treeView2.Nodes[i].Tag.ToString());
dealer.Add(treeView2.Nodes[i].Nodes[j].Tag.ToString());
m2++;
}
}
}
string[] brands; string[] items; string[] stations; string[] dealers;
brands = brand.ToArray();
items = item.ToArray();
stations = station.ToArray();
dealers = dealer.ToArray();
SqlConnection con = new SqlConnection(Global.constr);
con.Open();
SqlCommand del = new SqlCommand("delete PLReport", con);
del.ExecuteNonQuery();
del.Dispose();
for (int i = 0; i < m1; i++)
{
prate = 0;
SqlCommand cmdr = new SqlCommand("select top 1 purchasePrice from PurchaseDetails where ItemCode='" + item[i] + "' order by doc_date Desc", con);
SqlDataReader drr = cmdr.ExecuteReader();
while (drr.Read())
{
prate = Convert.ToDouble(drr[0]);
}
drr.Close();
cmdr.Dispose();
for (int j = 0; j < m2; j++)
{
SqlCommand cmd33 = new SqlCommand("select slno from SalesDetails where ItemCode='" + items[i] + "' and dealer='" + dealers[j] + "' and date between '" + dateTimePicker1.Value.ToString("yyyy-MM-dd") + "' and '" + dateTimePicker2.Value.ToString("yyyy-MM-dd") + "'", con);
SqlDataReader r33 = cmd33.ExecuteReader();
if (!r33.HasRows)
continue;
r33.Close();
cmd33.Dispose();
SqlCommand cmd = new SqlCommand("select sum(Qty),sum(rate) from SalesDetails where ItemCode='" + items[i] + "' and dealer='" + dealers[j] + "' and date between '" + dateTimePicker1.Value.ToString("yyyy-MM-dd") + "' and '" + dateTimePicker2.Value.ToString("yyyy-MM-dd") + "' group by ItemCode,Dealer", con);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
//MessageBox.Show("fgfg");
srate = 0;
b = double.TryParse(dr[1].ToString(), out srate);
rate = 0;
if (srate != 0)
rate = srate - prate;
qty = 0;
b = double.TryParse(dr[0].ToString(), out qty);
val = qty * rate;
if (checkBox3.Checked)//zero valued entry
{
SqlCommand cmd2 = new SqlCommand("insert PLReport values('" + stations[j] + "','" + dealers[j] + "','" + brands[i] + "','" + items[i] + "','" + val + "')", con);
cmd2.ExecuteNonQuery();
cmd2.Dispose();
}
else
{
if (val != 0)
{
SqlCommand cmd2 = new SqlCommand("insert PLReport values('" + stations[j] + "','" + dealers[j] + "','" + brands[i] + "','" + items[i] + "','" + val + "')", con);
cmd2.ExecuteNonQuery();
cmd2.Dispose();
}
}
}
dr.Close();
cmd.Dispose();
}
}
frmPLReport obj = new frmPLReport();
obj.ttle = "Item Wise Profit & Loss report from " + dateTimePicker1.Value.ToString("dd/MM/yyyy") + " to " + dateTimePicker2.Value.ToString("dd/MM/yyyy");
obj.option = 0;
obj.ShowDialog();
con.Close();
}
하나의 '난'루프가 실행하는 데 약 4 초를 취하고 내 코드입니다 딜러) 400 조건.
이 부분
는 실행 시간이 오래 걸리는 :SqlCommand cmd = new SqlCommand("select sum(Qty),sum(rate) from SalesDetails where ItemCode='" + items[i] + "' and dealer='" + dealers[j] + "' and date between '" + dateTimePicker1.Value.ToString("yyyy-MM-dd") + "' and '" + dateTimePicker2.Value.ToString("yyyy-MM-dd") + "' group by ItemCode,Dealer", con);
SqlDataReader dr = cmd.ExecuteReader();
그것의 너무 오랜 시간이 어떻게 문제를 해결하는 방법. 내 테이블 구조에서는 색인 생성이 허용되지 않습니다. 다른 해결책이 도움이 될 것입니다.
아마도이 질문은 [코드 검토] (http://codereview.stackexchange.com/)에 더 적합 할 것입니다. – musefan
정확한 부분을 식별해야합니다. 당신은 여러개의''i ''루프를 가지고 있습니다. (아마도 DB 액세스 하나를 가정한다면 그것은 분명합니다.) – musefan
SqlCommand cmd = new SqlCommand ("select sum (Qty), sum (("yyyy-MM-dd") SalesDetails에서 ItemCode = ''+ items [i] + ''및 dealer = ''+ 딜러 [j] + ''및 날짜 ''+ dateTimePicker1.Value.ToString + " 'and'"+ dateTimePicker2.Value.ToString ("yyyy-MM-dd") + "그룹 by ItemCode, Dealer", con); SqlDataReader dr = cmd.ExecuteReader(); –